From 236ca0acf4c963cb64ec89de1b4dca91b71e9f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=83=81=ED=98=B8=20Sangho=20Park?= Date: Wed, 12 Aug 2026 17:11:14 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20colab=20notebook=20=E2=80=94=20locate=20?= =?UTF-8?q?cuDNN/cuBLAS=20.so=20via=20find?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nvidia-cudnn-cu12/cublas-cu12 are namespace packages with no __file__, so os.path.dirname() raised TypeError and the install cell aborted. Locate libcublas.so/libcudnn.so under site-packages with find and build LD_LIBRARY_PATH from those. Also add a CTranslate2 GPU check cell (ctranslate2.get_cuda_device_count) right after install so GPU usability is confirmed before transcription. --- notebooks/luke-scribe-colab.ipynb | 11 ++++++++-- scripts/build_colab_notebook.py | 36 +++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/notebooks/luke-scribe-colab.ipynb b/notebooks/luke-scribe-colab.ipynb index d3ccdfb..5b82682 100644 --- a/notebooks/luke-scribe-colab.ipynb +++ b/notebooks/luke-scribe-colab.ipynb @@ -59,12 +59,19 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# 3) 설치 — Colab은 시스템 pip가 표준 (venv는 Colab에서 ensurepip 오류로 실패할 수 있음)\n!pip install -q --upgrade pip\n!pip install -q -e '.[engine,api]'\n!pip install -q edge-tts # 샘플 음성 생성용\n\n# CUDA 13(Colab)에서는 CTranslate2 wheel(CUDA 12용)이 런타임 라이브러리를 못 찾음.\n# CUDA 12 런타임(cuBLAS/cuDNN)을 pip로 설치하고 LD_LIBRARY_PATH에 추가한다.\n!pip install -q nvidia-cublas-cu12 nvidia-cudnn-cu12\nimport os, nvidia.cublas.lib, nvidia.cudnn.lib\nos.environ['LD_LIBRARY_PATH'] = (\n os.path.dirname(nvidia.cublas.lib.__file__) + ':' +\n os.path.dirname(nvidia.cudnn.lib.__file__) + ':' +\n os.environ.get('LD_LIBRARY_PATH', '')\n)\nprint('설치 완료')\n!which luke-scribe && luke-scribe --help 2>&1 | head -8\n" + "source": "# 3) 설치 — Colab은 시스템 pip가 표준 (venv는 Colab에서 ensurepip 오류로 실패할 수 있음)\n!pip install -q --upgrade pip\n!pip install -q -e '.[engine,api]'\n!pip install -q edge-tts # 샘플 음성 생성용\n\n# CUDA 13(Colab)에서는 CTranslate2 wheel(CUDA 12용)이 런타임 라이브러리를 못 찾음.\n# CUDA 12 런타임(cuBLAS/cuDNN)을 pip로 설치하고, 실제 .so 위치를 find로 찾아\n# LD_LIBRARY_PATH에 추가한다 (nvidia-*-cu12는 namespace package라 __file__이 없음).\n!pip install -q nvidia-cublas-cu12 nvidia-cudnn-cu12\nimport os, site, subprocess\nlib_dirs = set()\nfor lib in ('libcublas.so', 'libcudnn.so'):\n out = subprocess.run(\n ['bash', '-c', f'find {site.getsitepackages()[0]} -name \"{lib}*\" 2>/dev/null | head -3'],\n capture_output=True, text=True,\n ).stdout\n for line in out.splitlines():\n d = os.path.dirname(line)\n if d:\n lib_dirs.add(d)\nos.environ['LD_LIBRARY_PATH'] = ':'.join(lib_dirs) + ':' + os.environ.get('LD_LIBRARY_PATH', '')\nprint('LD_LIBRARY_PATH:', os.environ['LD_LIBRARY_PATH'])\nprint('설치 완료')\n!which luke-scribe && luke-scribe --help 2>&1 | head -8\n" + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": "# 4) CTranslate2 GPU 검증 — unsupported device cuda:0 해결 여부 확인\nimport ctranslate2\nprint('ctranslate2', ctranslate2.__version__)\nprint('CUDA device count:', ctranslate2.get_cuda_device_count())\nif ctranslate2.get_cuda_device_count() > 0:\n print('GPU 사용 가능 ✅ — 이후 전사는 GPU로 실행됩니다')\nelse:\n print('GPU 사용 불가 — CPU 폴백 필요 (--device cpu --compute-type int8)')\n" }, { "cell_type": "markdown", "metadata": {}, - "source": "## 3) 하드웨어 감지 — T4 GPU 실제 확인\n\nCPU-only 환경에서는 `T0 / cpu / int8`이 나왔지만,\nColab T4(16GB VRAM, sm_75)에서는 GPU가 감지되어야 합니다." + "source": "## 3) 하드웨어 감지 — GPU 실제 확인\n\nCPU-only 환경에서는 `T0 / cpu / int8`이 나왔지만,\nColab GPU(A100 80GB / T4 16GB)에서는 GPU가 감지되어야 합니다." }, { "cell_type": "code", diff --git a/scripts/build_colab_notebook.py b/scripts/build_colab_notebook.py index a91a84e..a279209 100644 --- a/scripts/build_colab_notebook.py +++ b/scripts/build_colab_notebook.py @@ -108,22 +108,40 @@ def cells() -> list[dict]: "!pip install -q edge-tts # 샘플 음성 생성용\n" "\n" "# CUDA 13(Colab)에서는 CTranslate2 wheel(CUDA 12용)이 런타임 라이브러리를 못 찾음.\n" - "# CUDA 12 런타임(cuBLAS/cuDNN)을 pip로 설치하고 LD_LIBRARY_PATH에 추가한다.\n" + "# CUDA 12 런타임(cuBLAS/cuDNN)을 pip로 설치하고, 실제 .so 위치를 find로 찾아\n" + "# LD_LIBRARY_PATH에 추가한다 (nvidia-*-cu12는 namespace package라 __file__이 없음).\n" "!pip install -q nvidia-cublas-cu12 nvidia-cudnn-cu12\n" - "import os, nvidia.cublas.lib, nvidia.cudnn.lib\n" - "os.environ['LD_LIBRARY_PATH'] = (\n" - " os.path.dirname(nvidia.cublas.lib.__file__) + ':' +\n" - " os.path.dirname(nvidia.cudnn.lib.__file__) + ':' +\n" - " os.environ.get('LD_LIBRARY_PATH', '')\n" - ")\n" + "import os, site, subprocess\n" + "lib_dirs = set()\n" + "for lib in ('libcublas.so', 'libcudnn.so'):\n" + " out = subprocess.run(\n" + " ['bash', '-c', f'find {site.getsitepackages()[0]} -name \"{lib}*\" 2>/dev/null | head -3'],\n" + " capture_output=True, text=True,\n" + " ).stdout\n" + " for line in out.splitlines():\n" + " d = os.path.dirname(line)\n" + " if d:\n" + " lib_dirs.add(d)\n" + "os.environ['LD_LIBRARY_PATH'] = ':'.join(lib_dirs) + ':' + os.environ.get('LD_LIBRARY_PATH', '')\n" + "print('LD_LIBRARY_PATH:', os.environ['LD_LIBRARY_PATH'])\n" "print('설치 완료')\n" "!which luke-scribe && luke-scribe --help 2>&1 | head -8\n" ), + code( + "# 4) CTranslate2 GPU 검증 — unsupported device cuda:0 해결 여부 확인\n" + "import ctranslate2\n" + "print('ctranslate2', ctranslate2.__version__)\n" + "print('CUDA device count:', ctranslate2.get_cuda_device_count())\n" + "if ctranslate2.get_cuda_device_count() > 0:\n" + " print('GPU 사용 가능 ✅ — 이후 전사는 GPU로 실행됩니다')\n" + "else:\n" + " print('GPU 사용 불가 — CPU 폴백 필요 (--device cpu --compute-type int8)')\n" + ), md( - "## 3) 하드웨어 감지 — T4 GPU 실제 확인\n" + "## 3) 하드웨어 감지 — GPU 실제 확인\n" "\n" "CPU-only 환경에서는 `T0 / cpu / int8`이 나왔지만,\n" - "Colab T4(16GB VRAM, sm_75)에서는 GPU가 감지되어야 합니다." + "Colab GPU(A100 80GB / T4 16GB)에서는 GPU가 감지되어야 합니다." ), code( "# 4) detect — GPU 감지 / 능력 등급 / 정밀도 / 워커수\n"