STBack23 commited on
Commit
4cd0c53
·
verified ·
1 Parent(s): a8338a8

Target A100 40GB runtime (AWQ Int4 thinker, no offload)

Browse files
README.md CHANGED
@@ -30,7 +30,9 @@ Qwen3-Omni 4-bit/AWQ khá nặng nên **toàn bộ pipeline chạy trên Colab**
30
 
31
  | Nơi chạy | Cấu hình | Vai trò |
32
  |---|---|---|
33
- | **Colab** | GPU **L4 24GB** | Chạy Qwen3-Omni **4-bit** (~17–18GB) + pyannote — toàn bộ pipeline |
 
 
34
 
35
  ## Trạng thái
36
  🚧 Đang phát triển. Đã xong **M1 — Chuẩn bị SRT** (parse → ghép cue vụn → gom cảnh → xuất)
 
30
 
31
  | Nơi chạy | Cấu hình | Vai trò |
32
  |---|---|---|
33
+ | **Colab** | GPU **A100 40GB** | Chạy Qwen3-Omni **AWQ Int4** chỉ thinker (~17GB) + pyannote — toàn bộ pipeline, không offload nên nhanh |
34
+
35
+ > Có thể chạy trên **L4 24GB** vì chỉ nạp thinker; A100 nhanh hơn rõ rệt do không phải offload.
36
 
37
  ## Trạng thái
38
  🚧 Đang phát triển. Đã xong **M1 — Chuẩn bị SRT** (parse → ghép cue vụn → gom cảnh → xuất)
colab/OmniSub_Colab.ipynb CHANGED
@@ -4,26 +4,29 @@
4
  "cell_type": "markdown",
5
  "metadata": {},
6
  "source": [
7
- "# OmniSub — Dịch SRT ZH→VI bằng Qwen3-Omni (Colab L4 24GB)\n",
8
  "\n",
9
- "Chạy lần lượt từng cell. Yêu cầu: Runtime **GPU L4** (Runtime → Change runtime type → L4).\n",
 
10
  "\n",
11
  "Pipeline 5 bước: chuẩn bị SRT → diarization (pyannote) → hồ sơ giọng (Omni) → dịch đa phương thức (Omni) → hậu kiểm & xuất."
12
  ]
13
  },
14
  {
15
  "cell_type": "code",
 
16
  "metadata": {},
 
17
  "source": [
18
  "# 1) Kiểm tra GPU\n",
19
  "!nvidia-smi"
20
- ],
21
- "execution_count": null,
22
- "outputs": []
23
  },
24
  {
25
  "cell_type": "code",
 
26
  "metadata": {},
 
27
  "source": [
28
  "# 2) Mount Google Drive (phim ở Gemma/Phim, cache model ở Gemma/Cache)\n",
29
  "from google.colab import drive\n",
@@ -34,13 +37,13 @@
34
  "os.makedirs(f'{DRIVE_ROOT}/Phim', exist_ok=True)\n",
35
  "os.makedirs(f'{DRIVE_ROOT}/Cache', exist_ok=True)\n",
36
  "print('Drive root:', DRIVE_ROOT)"
37
- ],
38
- "execution_count": null,
39
- "outputs": []
40
  },
41
  {
42
  "cell_type": "code",
 
43
  "metadata": {},
 
44
  "source": [
45
  "# 3) Lấy MÃ NGUỒN từ Hugging Face Hub + cài phụ thuộc (có log tiến trình)\n",
46
  "HF_REPO = 'STBack23/OmniSub' # ← repo HF chứa mã nguồn dự án\n",
@@ -80,13 +83,13 @@
80
  "print(' \"RESTART\" Colab hiện ở trên), rồi chạy cell 2 → 4 → 5 → 6.')\n",
81
  "print(' (KHÔNG cần chạy lại cell 3.)')\n",
82
  "print('='*60)"
83
- ],
84
- "execution_count": null,
85
- "outputs": []
86
  },
87
  {
88
  "cell_type": "code",
 
89
  "metadata": {},
 
90
  "source": [
91
  "# 4) Chọn phim — CHỈ cần nhập TÊN phim, tự dò file .srt và video trong Gemma/Phim\n",
92
  "import os\n",
@@ -140,15 +143,15 @@
140
  "print('✅ SRT :', SRT)\n",
141
  "print('✅ Video:', VIDEO)\n",
142
  "print('✅ Token:', 'có' if os.environ.get('HF_TOKEN') else 'CHƯA có (Bước 2 sẽ lỗi)')"
143
- ],
144
- "execution_count": null,
145
- "outputs": []
146
  },
147
  {
148
  "cell_type": "code",
 
149
  "metadata": {},
 
150
  "source": [
151
- "# 5) Nạp model Qwen3-Omni AWQ Int4 — CHỈ thinker (text-only), vừa L4 24GB\n",
152
  "# Bản full Qwen/Qwen3-Omni-30B (~70GB) trong Cache cũ KHÔNG dùng — có thể xóa để tiết kiệm Drive.\n",
153
  "import time, sys, os\n",
154
  "\n",
@@ -162,12 +165,12 @@
162
  "from omnisub.config import Config\n",
163
  "from omnisub.backends.transformers_qwen import TransformersQwenOmniBackend\n",
164
  "\n",
165
- "# AWQ Int4 — checkpoint đã lượng hóa sẵn, vừa Colab L4 24GB\n",
166
  "OMNI_MODEL = 'cyankiwi/Qwen3-Omni-30B-A3B-Instruct-AWQ-4bit'\n",
167
  "OMNI_QUANT = 'awq'\n",
168
  "\n",
169
  "# Patch backend (snapshot HF trên Drive có thể cũ) — luôn dùng Thinker text-only.\n",
170
- "# Thinker bỏ talker (~10GB) nên AWQ Int4 vừa 24GB; không offload disk (MoE lỗi re-save).\n",
171
  "def _thinker_load(self):\n",
172
  " if self._model is not None:\n",
173
  " return\n",
@@ -236,13 +239,13 @@
236
  "_t = time.time()\n",
237
  "backend.load()\n",
238
  "print(f'✅ Model đã nạp xong sau {time.time()-_t:.0f}s. Attention dùng: {backend.attn_implementation}')"
239
- ],
240
- "execution_count": null,
241
- "outputs": []
242
  },
243
  {
244
  "cell_type": "code",
 
245
  "metadata": {},
 
246
  "source": [
247
  "# 6) Chạy toàn bộ pipeline (Bước 1→5)\n",
248
  "import logging\n",
@@ -261,28 +264,26 @@
261
  ")\n",
262
  "print('Output SRT:', result.output_srt)\n",
263
  "print('Report :', result.report_path)"
264
- ],
265
- "execution_count": null,
266
- "outputs": []
267
  },
268
  {
269
  "cell_type": "code",
 
270
  "metadata": {},
 
271
  "source": [
272
  "# 7) Xem nhanh kết quả + report\n",
273
  "import json\n",
274
  "print(open(result.output_srt, encoding='utf-8').read()[:2000])\n",
275
  "print('\\n--- REPORT ---')\n",
276
  "print(json.dumps(json.load(open(result.report_path, encoding='utf-8')), ensure_ascii=False, indent=2))"
277
- ],
278
- "execution_count": null,
279
- "outputs": []
280
  }
281
  ],
282
  "metadata": {
283
  "accelerator": "GPU",
284
  "colab": {
285
- "gpuType": "L4",
286
  "provenance": []
287
  },
288
  "kernelspec": {
@@ -295,4 +296,4 @@
295
  },
296
  "nbformat": 4,
297
  "nbformat_minor": 0
298
- }
 
4
  "cell_type": "markdown",
5
  "metadata": {},
6
  "source": [
7
+ "# OmniSub — Dịch SRT ZH→VI bằng Qwen3-Omni (Colab A100 40GB)\n",
8
  "\n",
9
+ "Chạy lần lượt từng cell. Yêu cầu: Runtime **GPU A100** (Runtime → Change runtime type → A100).\n",
10
+ "AWQ Int4 chạy nhanh hơn nhiều trên A100 vì không phải offload sang CPU/disk.\n",
11
  "\n",
12
  "Pipeline 5 bước: chuẩn bị SRT → diarization (pyannote) → hồ sơ giọng (Omni) → dịch đa phương thức (Omni) → hậu kiểm & xuất."
13
  ]
14
  },
15
  {
16
  "cell_type": "code",
17
+ "execution_count": null,
18
  "metadata": {},
19
+ "outputs": [],
20
  "source": [
21
  "# 1) Kiểm tra GPU\n",
22
  "!nvidia-smi"
23
+ ]
 
 
24
  },
25
  {
26
  "cell_type": "code",
27
+ "execution_count": null,
28
  "metadata": {},
29
+ "outputs": [],
30
  "source": [
31
  "# 2) Mount Google Drive (phim ở Gemma/Phim, cache model ở Gemma/Cache)\n",
32
  "from google.colab import drive\n",
 
37
  "os.makedirs(f'{DRIVE_ROOT}/Phim', exist_ok=True)\n",
38
  "os.makedirs(f'{DRIVE_ROOT}/Cache', exist_ok=True)\n",
39
  "print('Drive root:', DRIVE_ROOT)"
40
+ ]
 
 
41
  },
42
  {
43
  "cell_type": "code",
44
+ "execution_count": null,
45
  "metadata": {},
46
+ "outputs": [],
47
  "source": [
48
  "# 3) Lấy MÃ NGUỒN từ Hugging Face Hub + cài phụ thuộc (có log tiến trình)\n",
49
  "HF_REPO = 'STBack23/OmniSub' # ← repo HF chứa mã nguồn dự án\n",
 
83
  "print(' \"RESTART\" Colab hiện ở trên), rồi chạy cell 2 → 4 → 5 → 6.')\n",
84
  "print(' (KHÔNG cần chạy lại cell 3.)')\n",
85
  "print('='*60)"
86
+ ]
 
 
87
  },
88
  {
89
  "cell_type": "code",
90
+ "execution_count": null,
91
  "metadata": {},
92
+ "outputs": [],
93
  "source": [
94
  "# 4) Chọn phim — CHỈ cần nhập TÊN phim, tự dò file .srt và video trong Gemma/Phim\n",
95
  "import os\n",
 
143
  "print('✅ SRT :', SRT)\n",
144
  "print('✅ Video:', VIDEO)\n",
145
  "print('✅ Token:', 'có' if os.environ.get('HF_TOKEN') else 'CHƯA có (Bước 2 sẽ lỗi)')"
146
+ ]
 
 
147
  },
148
  {
149
  "cell_type": "code",
150
+ "execution_count": null,
151
  "metadata": {},
152
+ "outputs": [],
153
  "source": [
154
+ "# 5) Nạp model Qwen3-Omni AWQ Int4 — CHỈ thinker (text-only); A100 40GB dư sức, chạy nhanh\n",
155
  "# Bản full Qwen/Qwen3-Omni-30B (~70GB) trong Cache cũ KHÔNG dùng — có thể xóa để tiết kiệm Drive.\n",
156
  "import time, sys, os\n",
157
  "\n",
 
165
  "from omnisub.config import Config\n",
166
  "from omnisub.backends.transformers_qwen import TransformersQwenOmniBackend\n",
167
  "\n",
168
+ "# AWQ Int4 — checkpoint đã lượng hóa sẵn (~17GB), A100 40GB nạp gọn trong VRAM\n",
169
  "OMNI_MODEL = 'cyankiwi/Qwen3-Omni-30B-A3B-Instruct-AWQ-4bit'\n",
170
  "OMNI_QUANT = 'awq'\n",
171
  "\n",
172
  "# Patch backend (snapshot HF trên Drive có thể cũ) — luôn dùng Thinker text-only.\n",
173
+ "# Thinker bỏ talker (~10GB), chỉ cần text; tránh offload disk (MoE lỗi re-save).\n",
174
  "def _thinker_load(self):\n",
175
  " if self._model is not None:\n",
176
  " return\n",
 
239
  "_t = time.time()\n",
240
  "backend.load()\n",
241
  "print(f'✅ Model đã nạp xong sau {time.time()-_t:.0f}s. Attention dùng: {backend.attn_implementation}')"
242
+ ]
 
 
243
  },
244
  {
245
  "cell_type": "code",
246
+ "execution_count": null,
247
  "metadata": {},
248
+ "outputs": [],
249
  "source": [
250
  "# 6) Chạy toàn bộ pipeline (Bước 1→5)\n",
251
  "import logging\n",
 
264
  ")\n",
265
  "print('Output SRT:', result.output_srt)\n",
266
  "print('Report :', result.report_path)"
267
+ ]
 
 
268
  },
269
  {
270
  "cell_type": "code",
271
+ "execution_count": null,
272
  "metadata": {},
273
+ "outputs": [],
274
  "source": [
275
  "# 7) Xem nhanh kết quả + report\n",
276
  "import json\n",
277
  "print(open(result.output_srt, encoding='utf-8').read()[:2000])\n",
278
  "print('\\n--- REPORT ---')\n",
279
  "print(json.dumps(json.load(open(result.report_path, encoding='utf-8')), ensure_ascii=False, indent=2))"
280
+ ]
 
 
281
  }
282
  ],
283
  "metadata": {
284
  "accelerator": "GPU",
285
  "colab": {
286
+ "gpuType": "A100",
287
  "provenance": []
288
  },
289
  "kernelspec": {
 
296
  },
297
  "nbformat": 4,
298
  "nbformat_minor": 0
299
+ }
src/omnisub/backends/transformers_qwen.py CHANGED
@@ -1,7 +1,7 @@
1
- """Backend Qwen3-Omni qua HuggingFace transformers (Colab L4 24GB).
2
 
3
- Mặc định: checkpoint AWQ Int4 + chỉ nạp THINKER (text-only) — bỏ talker (~10GB)
4
- nên vừa L4 24GB. Bản full + bitsandbytes 4-bit cần GPU >24GB.
5
 
6
  Import nặng đều lazy để Bước 1 không cần GPU.
7
  """
 
1
+ """Backend Qwen3-Omni qua HuggingFace transformers (Colab A100 40GB / L4 24GB).
2
 
3
+ Mặc định: checkpoint AWQ Int4 + chỉ nạp THINKER (text-only) — bỏ talker (~10GB).
4
+ Chạy được trên L4 24GB; trên A100 40GB nhanh hơn vì không phải offload.
5
 
6
  Import nặng đều lazy để Bước 1 không cần GPU.
7
  """