File size: 4,914 Bytes
c6ba81c
 
 
 
 
8cd8583
c6ba81c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8cd8583
c6ba81c
 
 
 
 
 
 
 
 
 
 
 
 
 
ef41e7f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": "# HachimiMT — Dịch Trung → Việt (Kaggle, GPU T4 miễn phí)\n\nChạy app dịch truyện **HachimiMT / MoxhiMT** (CTranslate2) trên Kaggle — GPU T4 miễn phí (~30 giờ/tuần), không cần cài gì trên máy.\n\n## ⚡ Trước khi chạy — bật GPU + Internet\n1. **`Settings → Accelerator → GPU T4 x2`** (app tự dùng các GPU CUDA khả dụng; T4 x2 thường nhanh hơn 1 T4 khi văn bản đủ dài).\n2. **`Settings → Internet → on`** (BẮT BUỘC — để tải code + model và tạo link công khai).\n3. Rồi **`Run All`**.\n\n> ⚠️ **Chọn `GPU T4 x2`** — **KHÔNG chọn `GPU P100`**: P100 (kiến trúc cũ) không hỗ trợ kiểu tính `int8_float16` của model nên app sẽ rớt về CPU (chậm ~50×). Cũng **không chọn TPU** (CTranslate2 không dùng được TPU).\n\n### 🚀 Tốc độ đo thật gần nhất (T4 x2, HachimiMT-60 CT2)\n| Chế độ | Tốc độ | File 2,84M chữ |\n|---|---|---|\n| **Beam 1** (ưu tiên tốc độ) | ~81.000 chữ Hán/giây | ~35 giây |\n| **Beam 2** (mặc định, chất lượng) | ~54.000 chữ Hán/giây | ~52 giây |\n\n> Beam thấp dịch nhanh hơn nhưng chất lượng nhỉnh kém hơn chút (chọn Beam trong giao diện). Notebook đặt sẵn batch 96, `batch_type=tokens`, window 8 và tự dùng cả hai GPU; Colab/T4 x1 đã tối ưu đạt ~28.000 chữ/giây ở beam 2 hoặc ~40.000 ở beam 1.\n\nCell cuối in ra **link công khai** (`*.gradio.live`) — bấm vào đó để mở giao diện dịch.\n\nMã nguồn: HF Space [ngocdang83/HachimiMT-demo](https://huggingface.co/spaces/ngocdang83/HachimiMT-demo)."
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Tải mã nguồn app (từ HF Space, ~75 KB)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import urllib.request, zipfile, os, shutil\n",
    "\n",
    "ZIP_URL = \"https://huggingface.co/spaces/ngocdang83/HachimiMT-demo/resolve/main/hachimimt-local.zip\"\n",
    "urllib.request.urlretrieve(ZIP_URL, \"hachimimt-local.zip\")\n",
    "shutil.rmtree(\"hachimimt\", ignore_errors=True)   # xóa bản cũ nếu chạy lại\n",
    "with zipfile.ZipFile(\"hachimimt-local.zip\") as z:\n",
    "    z.extractall(\".\")\n",
    "print(\"Đã tải + giải nén:\", sorted(os.listdir(\"hachimimt\")))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Cài thư viện (CTranslate2 + Gradio + tokenizer) — ~1 phút\n",
    "\n",
    "> Nếu thấy vài dòng đỏ `ERROR: pip's dependency resolver ...` về gói Kaggle cài sẵn — **vô hại**, cứ chạy tiếp."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install -q -r hachimimt/requirements.txt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Chạy app — đợi link `*.gradio.live` hiện ra rồi bấm vào\n",
    "\n",
    "Lần dịch đầu sẽ tự tải model (~57 MB) từ Hugging Face."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": "import os, sys\n\n# Bật link share công khai (gradio.live) — app đọc cờ này (cần Internet=on).\nos.environ[\"HACHIMIMT_SHARE\"] = \"1\"\n# Kaggle T4 x2 đồng cấu hình: cho app tự dùng cả 2 GPU nếu có.\nos.environ[\"HACHIMIMT_AUTO_ALL_GPUS\"] = \"1\"\n# Cấu hình đã sweep trên Kaggle T4 x2: batch=96, tokens, window=8 (effective 32x), inter=1.\nos.environ.setdefault(\"HACHIMIMT_BATCH_SIZE\", \"96\")\nos.environ.setdefault(\"HACHIMIMT_CT2_BATCH_TYPE\", \"tokens\")\nos.environ.setdefault(\"HACHIMIMT_CT2_WINDOW_MULTIPLIER\", \"8\")\nos.environ.setdefault(\"HACHIMIMT_INTER_THREADS\", \"1\")\nsys.path.insert(0, os.path.abspath(\"hachimimt/src\"))\n\n# Báo rõ đang chạy GPU hay CPU.\nfrom hardware import detect_hardware_profile\n_hw = detect_hardware_profile()\nif _hw.has_cuda:\n    print(f\"✅ Đang dùng GPU: {_hw.gpu_name} — nhanh!  ({_hw.summary})\")\n    print(\"⚙️ Kaggle speed config: batch=96, batch_type=tokens, window=8/effective 32x, inter=1, all GPUs\")\nelse:\n    print(\"⚠️ Đang chạy CPU (chậm ~50× GPU). Kiểm tra:\\n\"\n          \"   • Settings → Accelerator → GPU T4 x2 (KHÔNG chọn P100 — không tương thích, \"\n          \"sẽ rớt CPU)\\n\"\n          \"   • Settings → Internet → on\\n\"\n          \"   rồi Run All lại.\")\n\nimport app\napp.main()"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}