Download scripts/setup_gpu.py from uri410/NovelReader_translate_tool: direct link, hf CLI and curl.
- Browser
- Download file 5.14 kB
-
https://huggingface.co/spaces/uri410/NovelReader_translate_tool/resolve/main/scripts/setup_gpu.py
- Command line
-
hf download hf://spaces/uri410/NovelReader_translate_tool/scripts/setup_gpu.py
-
curl -L -o setup_gpu.py https://huggingface.co/spaces/uri410/NovelReader_translate_tool/resolve/main/scripts/setup_gpu.py
5.14 kB
| """Tự động kiểm tra, tải và cài đặt PyTorch CUDA + thư viện cuBLAS 12 cho GPU (Colab T4 / Linux).""" | |
| import os | |
| import sys | |
| import shutil | |
| import subprocess | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent.parent | |
| sys.path.insert(0, str(ROOT)) | |
| if hasattr(sys.stdout, 'reconfigure'): | |
| sys.stdout.reconfigure(encoding='utf-8') | |
| from translation.core.gpu_setup import ( | |
| choose_cuda_channel, | |
| torch_install_command, | |
| verify_torch_cuda, | |
| verify_ct2_cuda, | |
| install_torch_cuda, | |
| _TORCH_CUDA_CHANNELS, | |
| ) | |
| from translation.core.ct2_safe_import import preload_cuda_libraries | |
| def get_driver_cuda() -> tuple[bool, str | None, str | None, float | None]: | |
| """Lấy thông tin GPU NVIDIA và CUDA version từ nvidia-smi.""" | |
| if shutil.which("nvidia-smi") is None: | |
| return False, None, None, None | |
| try: | |
| header = subprocess.run(["nvidia-smi"], capture_output=True, text=True, timeout=10) | |
| gpu_info = subprocess.run( | |
| ["nvidia-smi", "--query-gpu=name,memory.total", "--format=csv,noheader,nounits"], | |
| capture_output=True, | |
| text=True, | |
| timeout=10, | |
| ) | |
| except Exception: | |
| return False, None, None, None | |
| gpu_name = None | |
| vram_gb = None | |
| cuda_ver = None | |
| if gpu_info.returncode == 0 and gpu_info.stdout.strip(): | |
| first_line = gpu_info.stdout.strip().splitlines()[0] | |
| parts = [p.strip() for p in first_line.split(",", 1)] | |
| gpu_name = parts[0] | |
| if len(parts) > 1: | |
| try: | |
| vram_gb = float(parts[1]) / 1024.0 | |
| except ValueError: | |
| pass | |
| if header.returncode == 0: | |
| import re | |
| m = re.search(r"CUDA Version:\s*([0-9]+\.[0-9]+)", header.stdout) | |
| if m: | |
| cuda_ver = m.group(1) | |
| return True, gpu_name, cuda_ver, vram_gb | |
| def install_nvidia_libs_if_needed(): | |
| """Đảm bảo các thư viện cuBLAS 12 và cuDNN đã được cài đặt trên Linux.""" | |
| if not sys.platform.startswith("linux"): | |
| return | |
| try: | |
| import nvidia.cublas # noqa: F401 | |
| except ImportError: | |
| print("📦 Đang tải và cài đặt thư viện runtime nvidia-cublas-cu12 & nvidia-cudnn-cu12...") | |
| subprocess.run( | |
| [sys.executable, "-m", "pip", "install", "-q", "nvidia-cublas-cu12", "nvidia-cudnn-cu12"], | |
| check=False | |
| ) | |
| def main(): | |
| print("=" * 65) | |
| print("🚀 NOVELREADER — TRÌNH KIỂM TRA & KÍCH HOẠT GPU T4 / CUDA") | |
| print("=" * 65) | |
| has_gpu, gpu_name, driver_cuda, vram_gb = get_driver_cuda() | |
| if not has_gpu: | |
| print("❌ Không tìm thấy GPU NVIDIA vật lý qua nvidia-smi.") | |
| print(" Nếu đang chạy trên Google Colab:") | |
| print(" Vào menu: Thời gian chạy -> Thay đổi loại thời gian chạy -> T4 GPU -> Lưu.") | |
| sys.exit(1) | |
| vram_str = f"{vram_gb:.1f} GB" if vram_gb else "không xác định" | |
| print(f"✅ Phát hiện GPU: {gpu_name} (VRAM: {vram_str})") | |
| print(f"📌 CUDA Driver Version: {driver_cuda or 'N/A'}") | |
| # 1. Cài đặt các gói thư viện cuBLAS 12 và cuDNN nếu là Linux (chứa libcublas.so.12) | |
| install_nvidia_libs_if_needed() | |
| # 2. Kiểm tra PyTorch CUDA hiện tại | |
| torch_ok, msg = verify_torch_cuda() | |
| channel = choose_cuda_channel(driver_cuda) or "cu124" | |
| if torch_ok: | |
| print(f"✅ PyTorch đã nhận GPU thành công: {msg}") | |
| else: | |
| print(f"\n⚠️ PyTorch hiện tại chưa hỗ trợ GPU: {msg}") | |
| print(f"📦 Đang tự động tải và cài đặt PyTorch CUDA tương thích (kênh {channel})...") | |
| success, res_msg = install_torch_cuda(driver_cuda, on_log=print) | |
| if not success: | |
| print(f"❌ Cài đặt PyTorch CUDA thất bại: {res_msg}") | |
| sys.exit(2) | |
| print(f"✅ {res_msg}") | |
| # 3. Preload các thư viện CUDA (libcublas.so.12, libcublasLt.so.12) vào bộ nhớ tiến trình | |
| preload_cuda_libraries() | |
| # 4. Kiểm tra CTranslate2 CUDA | |
| ct2_ok, ct2_msg = verify_ct2_cuda() | |
| if ct2_ok: | |
| print(f"✅ CTranslate2 CUDA: {ct2_msg}") | |
| else: | |
| print(f"⚠️ CTranslate2 chưa nhận CUDA: {ct2_msg}") | |
| print(" Đang thiết lập cờ HACHIMIMT_FORCE_CT2_CUDA=1...") | |
| os.environ["HACHIMIMT_FORCE_CT2_CUDA"] = "1" | |
| # 5. Đánh thức GPU và kiểm tra tensor | |
| try: | |
| import torch | |
| if torch.cuda.is_available(): | |
| x = torch.zeros((2048, 2048), device="cuda") @ torch.zeros((2048, 2048), device="cuda") | |
| allocated = torch.cuda.memory_allocated(0) / (1024**2) | |
| reserved = torch.cuda.memory_reserved(0) / (1024**2) | |
| del x | |
| torch.cuda.empty_cache() | |
| print(f"🔥 Kích hoạt GPU Tensor thành công! (Allocated: {allocated:.1f}MB, Reserved: {reserved:.1f}MB)") | |
| print("\n🎉 GPU T4 / CUDA ĐÃ SẴN SÀNG VỚI ĐẦY ĐỦ TÀI NGUYÊN!") | |
| except Exception as exc: | |
| print(f"⚠️ Lỗi khởi động tensor GPU: {exc}") | |
| if __name__ == "__main__": | |
| main() | |