ThomsenDrake commited on
Commit
9fb7868
·
verified ·
1 Parent(s): 0bf2ff5

Fix ZeroGPU v14p native Transformers runtime

Browse files
figment/zerogpu_runtime.py CHANGED
@@ -55,6 +55,7 @@ def _runtime_for(model_repo: str, model_subfolder: str, model_id: str) -> "_Zero
55
  class _ZeroGpuRuntime:
56
  def __init__(self, *, model_repo: str, model_subfolder: str, model_id: str) -> None:
57
  import torch
 
58
  from transformers import AutoModelForCausalLM
59
  from transformers import AutoTokenizer
60
 
@@ -66,14 +67,21 @@ class _ZeroGpuRuntime:
66
  self.tokenizer = AutoTokenizer.from_pretrained(
67
  model_repo,
68
  subfolder=model_subfolder,
69
- trust_remote_code=True,
70
  )
71
  if self.tokenizer.pad_token is None:
72
  self.tokenizer.pad_token = self.tokenizer.eos_token
 
 
 
 
 
 
73
  self.model = AutoModelForCausalLM.from_pretrained(
74
  model_repo,
75
  subfolder=model_subfolder,
76
- trust_remote_code=True,
 
77
  torch_dtype=torch.bfloat16,
78
  )
79
  self.model.to("cuda")
 
55
  class _ZeroGpuRuntime:
56
  def __init__(self, *, model_repo: str, model_subfolder: str, model_id: str) -> None:
57
  import torch
58
+ from transformers import AutoConfig
59
  from transformers import AutoModelForCausalLM
60
  from transformers import AutoTokenizer
61
 
 
67
  self.tokenizer = AutoTokenizer.from_pretrained(
68
  model_repo,
69
  subfolder=model_subfolder,
70
+ trust_remote_code=False,
71
  )
72
  if self.tokenizer.pad_token is None:
73
  self.tokenizer.pad_token = self.tokenizer.eos_token
74
+ model_config = AutoConfig.from_pretrained(
75
+ model_repo,
76
+ subfolder=model_subfolder,
77
+ trust_remote_code=False,
78
+ )
79
+ model_config.use_mamba_kernels = False
80
  self.model = AutoModelForCausalLM.from_pretrained(
81
  model_repo,
82
  subfolder=model_subfolder,
83
+ config=model_config,
84
+ trust_remote_code=False,
85
  torch_dtype=torch.bfloat16,
86
  )
87
  self.model.to("cuda")
requirements.txt CHANGED
@@ -1,13 +1,13 @@
1
  fastapi>=0.115,<1
2
  gradio>=6.0,<7
3
- huggingface_hub>=1.0,<2
4
  httpx>=0.27,<1
5
  pydantic>=2.7,<3
6
  python-dotenv>=1.0,<2
7
  PyYAML>=6.0,<7
8
  spaces>=0.40,<1
9
  torch>=2.8,<2.12
10
- transformers>=4.52,<5
11
  accelerate>=1.8,<2
12
  einops>=0.8,<1
13
  protobuf>=5,<7
@@ -15,5 +15,3 @@ safetensors>=0.5,<1
15
  sentencepiece>=0.2,<1
16
  setuptools>=70
17
  wheel>=0.45
18
- causal-conv1d>=1.6,<2
19
- mamba-ssm>=2.2,<3
 
1
  fastapi>=0.115,<1
2
  gradio>=6.0,<7
3
+ huggingface_hub>=1.5,<2
4
  httpx>=0.27,<1
5
  pydantic>=2.7,<3
6
  python-dotenv>=1.0,<2
7
  PyYAML>=6.0,<7
8
  spaces>=0.40,<1
9
  torch>=2.8,<2.12
10
+ transformers>=5.10,<6
11
  accelerate>=1.8,<2
12
  einops>=0.8,<1
13
  protobuf>=5,<7
 
15
  sentencepiece>=0.2,<1
16
  setuptools>=70
17
  wheel>=0.45
 
 
tests/test_zerogpu_runtime.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ from types import ModuleType
3
+ from types import SimpleNamespace
4
+ from typing import Any
5
+
6
+ from figment.zerogpu_runtime import _ZeroGpuRuntime
7
+
8
+
9
+ def test_zerogpu_runtime_uses_native_transformers_with_mamba_kernels_disabled(monkeypatch: Any) -> None:
10
+ calls: dict[str, Any] = {}
11
+ fake_config = SimpleNamespace(use_mamba_kernels=True, use_cache=False)
12
+
13
+ fake_torch = ModuleType("torch")
14
+ fake_torch.bfloat16 = "bf16"
15
+
16
+ class FakeAutoConfig:
17
+ @staticmethod
18
+ def from_pretrained(*args: Any, **kwargs: Any) -> Any:
19
+ calls["config"] = {"args": args, "kwargs": kwargs}
20
+ return fake_config
21
+
22
+ class FakeTokenizer:
23
+ pad_token = "<pad>"
24
+ eos_token = "</s>"
25
+
26
+ class FakeAutoTokenizer:
27
+ @staticmethod
28
+ def from_pretrained(*args: Any, **kwargs: Any) -> FakeTokenizer:
29
+ calls["tokenizer"] = {"args": args, "kwargs": kwargs}
30
+ return FakeTokenizer()
31
+
32
+ class FakeModel:
33
+ def __init__(self) -> None:
34
+ self.config = SimpleNamespace(use_cache=False)
35
+
36
+ def to(self, device: str) -> None:
37
+ calls["device"] = device
38
+
39
+ def eval(self) -> None:
40
+ calls["eval"] = True
41
+
42
+ class FakeAutoModelForCausalLM:
43
+ @staticmethod
44
+ def from_pretrained(*args: Any, **kwargs: Any) -> FakeModel:
45
+ calls["model"] = {"args": args, "kwargs": kwargs}
46
+ return FakeModel()
47
+
48
+ fake_transformers = ModuleType("transformers")
49
+ fake_transformers.AutoConfig = FakeAutoConfig
50
+ fake_transformers.AutoModelForCausalLM = FakeAutoModelForCausalLM
51
+ fake_transformers.AutoTokenizer = FakeAutoTokenizer
52
+ monkeypatch.setitem(sys.modules, "torch", fake_torch)
53
+ monkeypatch.setitem(sys.modules, "transformers", fake_transformers)
54
+
55
+ _ZeroGpuRuntime(model_repo="repo", model_subfolder="subfolder", model_id="model")
56
+
57
+ assert calls["tokenizer"]["kwargs"]["trust_remote_code"] is False
58
+ assert calls["config"]["kwargs"]["trust_remote_code"] is False
59
+ assert fake_config.use_mamba_kernels is False
60
+ assert calls["model"]["kwargs"]["config"] is fake_config
61
+ assert calls["model"]["kwargs"]["trust_remote_code"] is False
62
+ assert calls["model"]["kwargs"]["torch_dtype"] == "bf16"
63
+ assert calls["device"] == "cuda"
64
+ assert calls["eval"] is True