diff --git a/notebooks/luke-scribe-colab.ipynb b/notebooks/luke-scribe-colab.ipynb index d6f4bb3..7238c57 100644 --- a/notebooks/luke-scribe-colab.ipynb +++ b/notebooks/luke-scribe-colab.ipynb @@ -59,7 +59,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# 3) venv + 설치 (GPU 추론은 engine+api만으로 충분 — Colab T4에 CUDA 런타임 내장)\n!python3 -m venv .venv\n!source .venv/bin/activate && pip install -q --upgrade pip\n!source .venv/bin/activate && pip install -q -e '.[engine,api]'\n!source .venv/bin/activate && pip install -q edge-tts # 샘플 음성 생성용\n\n# 이후 셀에서 activate 없이 CLI 사용 가능하게 PATH 등록\nimport os\nos.environ['PATH'] = '/content/luke_scribe/.venv/bin:' + os.environ['PATH']\nprint('설치 완료')\n!luke-scribe --help 2>&1 | head -12\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 # 샘플 음성 생성용\nprint('설치 완료')\n!which luke-scribe && luke-scribe --help 2>&1 | head -8\n" }, { "cell_type": "markdown", @@ -83,7 +83,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# 5) 테스트 스위트\n!source .venv/bin/activate && python -m pytest tests/ -q 2>&1 | tail -5\n" + "source": "# 5) 테스트 스위트\n!python -m pytest tests/ -q 2>&1 | tail -5\n" }, { "cell_type": "markdown", @@ -133,7 +133,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# 10) 서버 기동 (in-proc 큐, 백그라운드)\nimport subprocess, time, os, json\nenv = dict(os.environ)\nenv['LUKESCRIBE_API_KEY_FILE'] = '/content/api_keys.json'\nenv['LUKESCRIBE_QUEUE_BACKEND'] = 'inproc'\nproc = subprocess.Popen(\n ['luke-scribe', 'serve', '--port', '8000'],\n env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True,\n)\n# 기동 대기\nimport urllib.request\nfor _ in range(30):\n try:\n urllib.request.urlopen('http://localhost:8000/health', timeout=1)\n break\n except Exception:\n time.sleep(1)\nprint('서버 기동 OK')\n" + "source": "# 10) 서버 기동 (in-proc 큐, 백그라운드 — Colab에서는 %%bash --bg 또는 nohup 사용)\n!mkdir -p /content/logs\n!nohup luke-scribe serve --port 8000 > /content/logs/server.log 2>&1 &\nimport time, urllib.request\nok = False\nfor _ in range(40):\n try:\n urllib.request.urlopen('http://localhost:8000/health', timeout=1)\n ok = True\n break\n except Exception:\n time.sleep(1)\nprint('서버 기동 OK' if ok else '서버 기동 실패 — 로그:')\nif not ok:\n print(open('/content/logs/server.log').read()[-1500:])\n" }, { "cell_type": "code", diff --git a/scripts/build_colab_notebook.py b/scripts/build_colab_notebook.py index b6ca20c..5c0fa03 100644 --- a/scripts/build_colab_notebook.py +++ b/scripts/build_colab_notebook.py @@ -93,17 +93,12 @@ def cells() -> list[dict]: "!ffprobe -version 2>&1 | head -1\n" ), code( - "# 3) venv + 설치 (GPU 추론은 engine+api만으로 충분 — Colab T4에 CUDA 런타임 내장)\n" - "!python3 -m venv .venv\n" - "!source .venv/bin/activate && pip install -q --upgrade pip\n" - "!source .venv/bin/activate && pip install -q -e '.[engine,api]'\n" - "!source .venv/bin/activate && pip install -q edge-tts # 샘플 음성 생성용\n" - "\n" - "# 이후 셀에서 activate 없이 CLI 사용 가능하게 PATH 등록\n" - "import os\n" - "os.environ['PATH'] = '/content/luke_scribe/.venv/bin:' + os.environ['PATH']\n" + "# 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" "print('설치 완료')\n" - "!luke-scribe --help 2>&1 | head -12\n" + "!which luke-scribe && luke-scribe --help 2>&1 | head -8\n" ), md( "## 3) 하드웨어 감지 — T4 GPU 실제 확인\n" @@ -118,7 +113,7 @@ def cells() -> list[dict]: md("## 4) 단위/통합 테스트 (127개)\n\nmock 기반 테스트가 GPU 환경에서도 전부 통과하는지 확인합니다."), code( "# 5) 테스트 스위트\n" - "!source .venv/bin/activate && python -m pytest tests/ -q 2>&1 | tail -5\n" + "!python -m pytest tests/ -q 2>&1 | tail -5\n" ), md( "## 5) 실전 전사 (GPU)\n\n" @@ -155,24 +150,21 @@ def cells() -> list[dict]: "!luke-scribe key --create --scopes transcribe,admin --file /content/api_keys.json\n" ), code( - "# 10) 서버 기동 (in-proc 큐, 백그라운드)\n" - "import subprocess, time, os, json\n" - "env = dict(os.environ)\n" - "env['LUKESCRIBE_API_KEY_FILE'] = '/content/api_keys.json'\n" - "env['LUKESCRIBE_QUEUE_BACKEND'] = 'inproc'\n" - "proc = subprocess.Popen(\n" - " ['luke-scribe', 'serve', '--port', '8000'],\n" - " env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True,\n" - ")\n" - "# 기동 대기\n" - "import urllib.request\n" - "for _ in range(30):\n" + "# 10) 서버 기동 (in-proc 큐, 백그라운드 — Colab에서는 %%bash --bg 또는 nohup 사용)\n" + "!mkdir -p /content/logs\n" + "!nohup luke-scribe serve --port 8000 > /content/logs/server.log 2>&1 &\n" + "import time, urllib.request\n" + "ok = False\n" + "for _ in range(40):\n" " try:\n" " urllib.request.urlopen('http://localhost:8000/health', timeout=1)\n" + " ok = True\n" " break\n" " except Exception:\n" " time.sleep(1)\n" - "print('서버 기동 OK')\n" + "print('서버 기동 OK' if ok else '서버 기동 실패 — 로그:')\n" + "if not ok:\n" + " print(open('/content/logs/server.log').read()[-1500:])\n" ), code( "# 11) 업로드 → poll → 결과\n"