Skip to main content

๊ธฐ๊ณ„ ํ•™์Šต์„ ์œ„ํ•œ GitHub Codespaces ์‹œ์ž‘

GitHub Codespaces ๋ฐ ๊ธฐ๋ณธ ์ œ๊ณต ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ๊ณ„ ํ•™์Šต ํ”„๋กœ์ ํŠธ ์ž‘์—…์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์†Œ๊ฐœ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” GitHub Codespaces๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ๊ณ„ ํ•™์Šต์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž๋ฅผ ๋นŒ๋“œํ•˜๊ณ , GitHub Codespaces์— ๋ฏธ๋ฆฌ ์„ค์น˜๋œ ๋„๊ตฌ ์ค‘ ๋ช‡ ๊ฐ€์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , JupyterLab์—์„œ codespace๋ฅผ ์—ฌ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž ๋นŒ๋“œ

Jupyter Notebook์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

Jupyter Notebook์€ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์…€ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  Notebook์—๋Š” PyTorch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž๋ฅผ ๋นŒ๋“œํ•˜๋Š” ์…€์ด ์—ฌ๋Ÿฌ ๊ฐœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์…€์€ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ์‹ ๊ฒฝ๋ง์„ ์„ค์ •ํ•˜๊ณ , ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚จ ๋‹ค์Œ, ํ•ด๋‹น ๋ชจ๋ธ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์…€์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ Jupyter๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถœ๋ ฅ์„ Notebook์— ๋‹ค์‹œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Codespace ๋งŒ๋“ค๊ธฐ

  1. github/codespaces-jupyter ํ…œํ”Œ๋ฆฟ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ด ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ์„ ํด๋ฆญํ•œ ๋‹ค์Œ, codespace์—์„œ ์—ด๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "์ด ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ" ๋‹จ์ถ”์™€ "codespace์—์„œ ์—ด๊ธฐ" ์˜ต์…˜์„ ํ‘œ์‹œํ•˜๋„๋ก ํ™•์žฅ๋œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์Šคํฌ๋ฆฐ์ƒท.

์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ codespace๋Š” ์›น ๊ธฐ๋ฐ˜ ๋ฒ„์ „์˜ Visual Studio Code์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž Notebook ์—ด๊ธฐ

GitHub Codespaces์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์—๋Š” codespace์— ๋ฏธ๋ฆฌ ์„ค์น˜๋œ ๊ธฐ๊ณ„ ํ•™์Šต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด Numpy, pandas, SciPy, Matplotlib, seaborn, scikit-learn, Keras, PyTorch, Requests, Plotly์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์†Œ๊ฐœ ๋ฐ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  1. VS Code ํŽธ์ง‘๊ธฐ์—์„œ ํ‘œ์‹œ๋˜๋Š” โ€œ์‹œ์ž‘โ€ ํƒญ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  2. notebooks/image-classifier.ipynb Notebook ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž ๋นŒ๋“œ

์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž Notebook์—๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹ ๊ฒฝ๋ง์„ ํ•™์Šต์‹œํ‚ค๊ณ  ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ชจ๋‘ ์‹คํ–‰์„ ํด๋ฆญํ•˜์—ฌ Notebook ์…€์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    "image-classifier.ipynb" ํŒŒ์ผ์˜ ํŽธ์ง‘๊ธฐ ํƒญ ์œ„์ชฝ์˜ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค. ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ "๋ชจ๋‘ ์‹คํ–‰"์ด๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ ๋‹จ์ถ” ์œ„๋กœ ๊ฐ€์ ธ๋‹ค ๋†“์Šต๋‹ˆ๋‹ค.

  2. ์ปค๋„ ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด Python ํ™˜๊ฒฝ์„ ์„ ํƒํ•œ ๋‹ค์Œ, ๊ถŒ์žฅ ์œ„์น˜์—์„œ Python ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    "Python ํ™˜๊ฒฝ ์„ ํƒ" ๋“œ๋กญ๋‹ค์šด์˜ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค. Python ๋ฒ„์ „ ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์—๋Š” "๊ถŒ์žฅ"์ด๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

  3. ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ ๊ฐ ์…€์˜ ์ถœ๋ ฅ์„ ๋ด…๋‹ˆ๋‹ค.

    "3๋‹จ๊ณ„: ๋„คํŠธ์›Œํฌ ํ•™์Šต ๋ฐ ๋ชจ๋ธ ์ €์žฅ" ํ—ค๋”๊ฐ€ ์žˆ๋Š” ํŽธ์ง‘๊ธฐ์˜ ์…€ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค.

JupyterLab์—์„œ codespace ์—ด๊ธฐ

github.com/codespaces์˜ "codespaces" ํŽ˜์ด์ง€์—์„œ ๋˜๋Š” GitHub CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ JupyterLab์—์„œ codespace๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด Codespace ์—ด๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์—ด๋ ค ์žˆ๋Š” codespace์— JupyterLab ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์—๋Š” JupyterLab์ด ํฌํ•จ๋˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์—์„œ ๋งŒ๋“  codespace๋Š” ํ•ญ์ƒ JupyterLab์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์†Œ๊ฐœ ๋ฐ devcontainers/images ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์—์„œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ devcontainer.json ํŒŒ์ผ์— ghcr.io/devcontainers/features/python ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ JupyterLab์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…˜ "installJupyterlab": true๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ devcontainers/features ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ python ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

codespace์— ๋Œ€ํ•œ NVIDIA CUDA ๊ตฌ์„ฑ

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด ์„น์…˜์€ GPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์—์„œ codespaces๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ฐ์—๊ฒŒ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ‰๊ฐ€ํŒ ๊ธฐ๊ฐ„ ๋™์•ˆ ์„ ํƒํ•œ ๊ณ ๊ฐ์—๊ฒŒ GPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ ์œ ํ˜•์„ ์„ ํƒํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต๊ธ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋Š” codespace์˜ GPU๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด NVIDIA CUDA๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ devcontainer.json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ์„ ๋งŒ๋“ค๊ณ  CUDA๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์†Œ๊ฐœ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

nvidia-cuda ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ devcontainers/features ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  1. codespace์˜ ํŽธ์ง‘๊ธฐ์—์„œ .devcontainer/devcontainer.json ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.

  2. ๋‹ค์Œ ๋‚ด์šฉ์ด ํฌํ•จ๋œ ์ตœ์ƒ์œ„ features ๊ฐœ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    JSON
      "features": {
        "ghcr.io/devcontainers/features/nvidia-cuda:1": {
          "installCudnn": true
        }
      }
    

    features ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์ด ์ž์Šต์„œ์— ๋Œ€ํ•ด ๋งŒ๋“  ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์ž ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ devcontainer.json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ œ devcontainer.json ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
      "customizations": {
        "vscode": {
          "extensions": [
            "ms-python.python",
            "ms-toolsai.jupyter"
          ]
        }
      },
      "features": {
        "ghcr.io/devcontainers/features/nvidia-cuda:1": {
          "installCudnn": true
        }
      }
    }
    
  3. ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  4. VS Code Command Palette์— ์•ก์„ธ์Šค(Shift+Command+P / Ctrl+Shift+P)ํ•œ ํ›„, โ€œrebuildโ€ ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Codespaces: ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ๋นŒ๋“œ"์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋“œ๋กญ๋‹ค์šด์—์„œ "Codespace: Rebuild Container" ์˜ต์…˜์ด ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ๋ช…๋ น ํŒ”๋ ˆํŠธ์˜ ์Šคํฌ๋ฆฐ์ƒท

    ํŒ

    ๋•Œ์— ๋”ฐ๋ผ ๋‹ค์‹œ ์ „์ฒด ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์บ์‹œ๋ฅผ ์ง€์šฐ๊ณ  ์ƒˆ ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Codespace์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ๋นŒ๋“œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”. codespace ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด codespace๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

  5. ๋‚˜์ค‘์— ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋งŒ๋“  ๋ชจ๋“  ์ƒˆ codespace์— CUDA๊ฐ€ ์„ค์น˜๋˜๋„๋ก ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ…œํ”Œ๋ฆฟ์—์„œ codespace ๋งŒ๋“ค๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.