{ "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 }