ํผ์ฆ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

๊ฐ ํผ์ฆ์€ ๋‹จ๊ณ„์ ์œผ๋กœ ์‹ค๋ ฅ์„ ์Œ“์„ ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ๊ด€๋œ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๊ฐœ์š”: ๋ฌธ์ œ ์ •์˜์™€ ํ•ต์‹ฌ ๊ฐœ๋… ์†Œ๊ฐœ
  • ๊ตฌ์„ฑ: ๊ธฐ์ˆ ์  ์„ค์ •๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์„ฑ ์„ค๋ช…
  • ์™„์„ฑํ•  ์ฝ”๋“œ: problems/pXX/์— ์ฑ„์›Œ์•ผ ํ•  ๋ถ€๋ถ„์ด ํ‘œ์‹œ๋œ ๊ตฌํ˜„ ํ…œํ”Œ๋ฆฟ
  • ํžŒํŠธ: ํ•„์š”ํ•  ๋•Œ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ์ „๋žต์  ํžŒํŠธ๋กœ, ์ •๋‹ต์„ ์ง์ ‘ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ํ’€์ด: ์„ฑ๋Šฅ ๊ณ ๋ ค์‚ฌํ•ญ๊ณผ ๊ฐœ๋… ์„ค๋ช…์„ ํฌํ•จํ•œ ์ข…ํ•ฉ ๋ถ„์„

ํผ์ฆ์€ ์ด์ „์— ๋ฐฐ์šด ๊ฐœ๋… ์œ„์— ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์Œ“์•„๊ฐ€๋ฉฐ ์ ์ฐจ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ํผ์ฆ์€ ์•ž์„  ํผ์ฆ์˜ ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ, ์ˆœ์„œ๋Œ€๋กœ ํ’€์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ์‹คํ–‰ํ•˜๊ธฐ

๋ชจ๋“  ํผ์ฆ์—๋Š” ๊ตฌํ˜„ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒ ๊ฒฐ๊ณผ์™€ ๋น„๊ตํ•ด์ฃผ๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํผ์ฆ๋ณ„๋กœ ์‹คํ–‰ ๋ฐฉ๋ฒ•๊ณผ ๊ฒ€์ฆ ์ ˆ์ฐจ๊ฐ€ ์•ˆ๋‚ด๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ค€๋น„

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

๋จผ์ € ์‹œ์Šคํ…œ์ด ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

์ง€์›๋˜๋Š” GPU

ํผ์ฆ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ง€์›๋˜๋Š” GPU๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์„ค์ •์„ ๋งˆ์นœ ๋’ค ์•„๋ž˜ ํ™˜๊ฒฝ ์„ค์ •์˜ gpu-specs ๋ช…๋ น์–ด๋กœ GPU ํ˜ธํ™˜์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ

[!NOTE] ์šด์˜์ฒด์ œ๋ณ„ GPU ์ง€์› ์„ค์ • ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

Windows WSL2 for Linux with NVIDIA

Windows Subsystem for Linux(WSL2, ์˜ˆ: Ubuntu)์—์„œ NVIDIA GPU๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด NVIDIA CUDA on WSL ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ•ต์‹ฌ์€ Windows์šฉ NVIDIA CUDA ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋“œ๋ผ์ด๋ฒ„๊ฐ€ WSL2๋ฅผ ์™„๋ฒฝํžˆ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Windows์— NVIDIA GPU ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•˜๋ฉด WSL 2 ์•ˆ์—์„œ CUDA๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Windows ํ˜ธ์ŠคํŠธ์˜ CUDA ๋“œ๋ผ์ด๋ฒ„๊ฐ€ WSL 2 ๋‚ด๋ถ€์—์„œ libcuda.so๋กœ ์Šคํ…(stub) ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ, WSL 2 ์•ˆ์— ๋ณ„๋„์˜ NVIDIA GPU Linux ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜ ํ›„ ์ •์ƒ ๋™์ž‘์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Windows์—์„œ ํ™•์ธ: PowerShell์„ ์—ฝ๋‹ˆ๋‹ค (WSL์ด ์•„๋‹™๋‹ˆ๋‹ค)

nvidia-smi

WSL ๋‚ด๋ถ€์—์„œ ํ™•์ธ: (๋จผ์ € WSL์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: wsl -d Ubuntu)

ls -l /usr/lib/wsl/lib/nvidia-smi
/usr/lib/wsl/lib/nvidia-smi

Pixi์—์„œ ์„ค์ •์„ ํ™•์ธํ•˜๊ณ , ํ•„์š”์‹œ ๋ˆ„๋ฝ๋œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: cuda-gdb ๋””๋ฒ„๊น…์šฉ)

pixi run nvidia-smi
pixi run setup-cuda-gdb
pixi run mojo debug --help
pixi run cuda-gdb --version

WSL์—์„œ๋Š” VS Code๋ฅผ ์—๋””ํ„ฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Windows์—์„œ https://code.visualstudio.com/์„ ํ†ตํ•ด VS Code๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ Remote - WSL ํ™•์žฅ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

[!NOTE] ํผ์ฆ 1-15๋Š” ๋ชจ๋‘ WSL๊ณผ Linux์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Linux native with NVIDIA

๋จผ์ € GPU์™€ Ubuntu ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (์ง€์›๋˜๋Š” Ubuntu LTS: 20.04, 22.04, 24.04)

lspci | grep -i nvidia
lsb_release -a

NVIDIA ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (ํ•„์ˆ˜)

sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
sudo reboot

Linux์—์„œ๋Š” VS Code๋ฅผ ์—๋””ํ„ฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VS Code APT ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Microsoft GPG ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ

wget -qO- https://packages.microsoft.com/keys/microsoft.asc \
  | gpg --dearmor \
  | sudo tee /usr/share/keyrings/packages.microsoft.gpg > /dev/null

VS Code APT ์ €์žฅ์†Œ ์ถ”๊ฐ€

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] \
https://packages.microsoft.com/repos/code stable main" \
| sudo tee /etc/apt/sources.list.d/vscode.list

VS Code ์„ค์น˜ ๋ฐ ํ™•์ธ

sudo apt update
sudo apt install code
code --version

[!NOTE] ํผ์ฆ 1-15๋Š” ๋ชจ๋‘ Linux์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

macOS Apple Silicon

osx-arm64 ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • macOS 15.0 ์ด์ƒ โ€” ์ตœ์  ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. pixi run check-macos๋กœ ํ™•์ธํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”.
  • Xcode 16 ์ด์ƒ โ€” ์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. xcodebuild -version์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

xcrun -sdk macosx metal ์‹คํ–‰ ์‹œ cannot execute tool 'metal' due to missing Metal toolchain ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

xcodebuild -downloadComponent MetalToolchain

์ดํ›„ xcrun -sdk macosx metal์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด no input files error๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผ ์ •์ƒ์ž…๋‹ˆ๋‹ค.

[!NOTE] ํ˜„์žฌ ํผ์ฆ 1-8๊ณผ 11-15๊ฐ€ macOS์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ํผ์ฆ ์ง€์›์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์‹

๋‹ค์Œ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค:

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ (๋ณ€์ˆ˜, ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ํ•จ์ˆ˜)
  • ๋ณ‘๋ ฌ ์ปดํ“จํŒ… ๊ฐœ๋… (์Šค๋ ˆ๋“œ, ๋™๊ธฐํ™”, ๊ฒฝ์Ÿ ์ƒํƒœ)
  • Mojo ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (ํฌ์ธํ„ฐ ์ž…๋ฌธ ์„น์…˜ ํฌํ•จ)
  • GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์–ด๋‘๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค!

GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜์ด ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค! ํผ์ฆ์„ ํ’€์–ด๊ฐ€๋ฉฐ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mojo๐Ÿ”ฅ์™€ ํ•จ๊ป˜ GPU ์ปดํ“จํŒ…์˜ ์„ธ๊ณ„๋กœ ๋– ๋‚˜๋ด…์‹œ๋‹ค!

ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ

  1. GitHub ์ €์žฅ์†Œ๋ฅผ ํด๋ก ํ•˜๊ณ  ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค:

    # ์ €์žฅ์†Œ ํด๋ก 
    git clone https://github.com/modular/mojo-gpu-puzzles
    cd mojo-gpu-puzzles
    
  2. Mojo๐Ÿ”ฅ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

    ์˜ต์…˜ 1 (๊ฐ•๋ ฅ ์ถ”์ฒœ): pixi

    ์ด ํ”„๋กœ์ ํŠธ์—์„œ pixi๋ฅผ ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    • Modular์˜ MAX/Mojo ํŒจํ‚ค์ง€์— ์‰ฝ๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • GPU ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ
    • conda + PyPI ์ƒํƒœ๊ณ„๋ฅผ ๋ชจ๋‘ ์ง€์›

    ์ฐธ๊ณ : ์ผ๋ถ€ ํผ์ฆ์€ pixi์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

    ์„ค์น˜:

    curl -fsSL https://pixi.sh/install.sh | sh
    

    ์—…๋ฐ์ดํŠธ:

    pixi self-update
    

    ์˜ต์…˜ 2: uv

    ์„ค์น˜:

    curl -fsSL https://astral.sh/uv/install.sh | sh
    

    ์—…๋ฐ์ดํŠธ:

    uv self update
    

    ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ:

    uv venv && source .venv/bin/activate
    
  3. ์„ค์ •์„ ํ™•์ธํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ํผ์ฆ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

# GPU ์‚ฌ์–‘ ํ™•์ธ
pixi run gpu-specs

# ์ฒซ ๋ฒˆ์งธ ํผ์ฆ ์‹คํ–‰
# ์•„์ง ๊ตฌํ˜„ ์ „์ด๋ฏ€๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค! ๋ณธ๋ฌธ์„ ๋”ฐ๋ผ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”
pixi run p01
# GPU ์‚ฌ์–‘ ํ™•์ธ
pixi run gpu-specs

# ์ฒซ ๋ฒˆ์งธ ํผ์ฆ ์‹คํ–‰
# ์•„์ง ๊ตฌํ˜„ ์ „์ด๋ฏ€๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค! ๋ณธ๋ฌธ์„ ๋”ฐ๋ผ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”
pixi run -e amd p01
# GPU ์‚ฌ์–‘ ํ™•์ธ
pixi run gpu-specs

# ์ฒซ ๋ฒˆ์งธ ํผ์ฆ ์‹คํ–‰
# ์•„์ง ๊ตฌํ˜„ ์ „์ด๋ฏ€๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค! ๋ณธ๋ฌธ์„ ๋”ฐ๋ผ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”
pixi run -e apple p01
# GPU๋ณ„ ์˜์กด์„ฑ ์„ค์น˜
uv pip install -e ".[nvidia]"  # NVIDIA GPU์šฉ
# ๋˜๋Š”
uv pip install -e ".[amd]"     # AMD GPU์šฉ

# GPU ์‚ฌ์–‘ ํ™•์ธ
uv run poe gpu-specs

# ์ฒซ ๋ฒˆ์งธ ํผ์ฆ ์‹คํ–‰
# ์•„์ง ๊ตฌํ˜„ ์ „์ด๋ฏ€๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค! ๋ณธ๋ฌธ์„ ๋”ฐ๋ผ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”
uv run poe p01

ํผ์ฆ ํ’€๊ธฐ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

  • problems/: ํ’€์ด๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค (์—ฌ๊ธฐ์„œ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค!)
  • solutions/: ๋น„๊ต์™€ ํ•™์Šต์„ ์œ„ํ•œ ์ฐธ๊ณ  ํ’€์ด์ž…๋‹ˆ๋‹ค. ์ฑ… ์ „๋ฐ˜์— ๊ฑธ์ณ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค

์ž‘์—… ํ๋ฆ„

  1. problems/pXX/์—์„œ ํผ์ฆ ํ…œํ”Œ๋ฆฟ์„ ์—ฝ๋‹ˆ๋‹ค
  2. ์ œ๊ณต๋œ ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์— ํ’€์ด๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค
  3. ๊ตฌํ˜„์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค: pixi run pXX ๋˜๋Š” uv run poe pXX (ํ”Œ๋žซํผ์— ๋”ฐ๋ผ -e platform์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: -e amd)
  4. solutions/pXX/์˜ ์ฐธ๊ณ  ํ’€์ด์™€ ๋น„๊ตํ•˜๋ฉฐ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ฐฐ์›๋‹ˆ๋‹ค

์ฃผ์š” ๋ช…๋ น์–ด

# ํผ์ฆ ์‹คํ–‰ (ํ•„์š”์‹œ -e๋กœ ํ”Œ๋žซํผ ์ง€์ •)
pixi run pXX             # NVIDIA (๊ธฐ๋ณธ๊ฐ’) `pixi run -e nvidia pXX`์™€ ๋™์ผ
pixi run -e amd pXX      # AMD GPU
pixi run -e apple pXX    # Apple GPU

# ํ’€์ด ํ…Œ์ŠคํŠธ
pixi run tests           # ๋ชจ๋“  ํ’€์ด ํ…Œ์ŠคํŠธ
pixi run tests pXX       # ํŠน์ • ํผ์ฆ ํ…Œ์ŠคํŠธ

# ์ˆ˜๋™ ์‹คํ–‰
pixi run mojo problems/pXX/pXX.mojo     # ๋‚ด ๊ตฌํ˜„
pixi run mojo solutions/pXX/pXX.mojo    # ์ฐธ๊ณ  ํ’€์ด

# ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์…ธ
pixi shell               # ํ™˜๊ฒฝ ์ง„์ž…
mojo problems/p01/p01.mojo              # ์ง์ ‘ ์‹คํ–‰
exit                     # ์…ธ ์ข…๋ฃŒ

# ๊ฐœ๋ฐœ
pixi run format         # ์ฝ”๋“œ ํฌ๋งทํŒ…
pixi task list          # ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด
# ์ฐธ๊ณ : uv๋Š” ์ œํ•œ์ ์ด๋ฉฐ ์ผ๋ถ€ ์ฑ•ํ„ฐ๋Š” pixi๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค
# GPU๋ณ„ ์˜์กด์„ฑ ์„ค์น˜:
uv pip install -e ".[nvidia]"  # NVIDIA GPU์šฉ
uv pip install -e ".[amd]"     # AMD GPU์šฉ

# ํ’€์ด ํ…Œ์ŠคํŠธ
uv run poe tests        # ๋ชจ๋“  ํ’€์ด ํ…Œ์ŠคํŠธ
uv run poe tests pXX    # ํŠน์ • ํผ์ฆ ํ…Œ์ŠคํŠธ

# ์ˆ˜๋™ ์‹คํ–‰
uv run mojo problems/pXX/pXX.mojo      # ๋‚ด ๊ตฌํ˜„
uv run mojo solutions/pXX/pXX.mojo     # ์ฐธ๊ณ  ํ’€์ด

GPU ์ง€์› ํ˜„ํ™ฉ

์•„๋ž˜ ํ‘œ๋Š” ํผ์ฆ๋ณ„ GPU ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํผ์ฆ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ GPU ๊ธฐ๋Šฅ๊ณผ ๋ฒค๋”๋ณ„ ๋„๊ตฌ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ํผ์ฆNVIDIA GPUAMD GPUApple GPU๋น„๊ณ 
Part I: GPU ๊ธฐ์ดˆ
1 - Mapโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
2 - Zipโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
3 - ๊ฐ€๋“œโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
4 - Map 2Dโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
5 - ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
6 - ๋ธ”๋กโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
7 - ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
8 - ์Šคํ…์‹คโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
Part II: ๋””๋ฒ„๊น…
9 - GPU ๋””๋ฒ„๊ฑฐโœ…โŒโŒNVIDIA ์ „์šฉ ๋””๋ฒ„๊น… ๋„๊ตฌ
10 - ์ƒˆ๋‹ˆํƒ€์ด์ €โœ…โŒโŒNVIDIA ์ „์šฉ ๋””๋ฒ„๊น… ๋„๊ตฌ
Part III: GPU ์•Œ๊ณ ๋ฆฌ์ฆ˜
11 - ๋ฆฌ๋•์…˜โœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
12 - ์Šค์บ”โœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
13 - ํ’€๋งโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
14 - ํ•ฉ์„ฑ๊ณฑโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
15 - ํ–‰๋ ฌ ๊ณฑ์…ˆโœ…โœ…โœ…๊ธฐ๋ณธ GPU ์ปค๋„
16 - Flashdotโœ…โœ…โœ…๊ณ ๊ธ‰ ๋ฉ”๋ชจ๋ฆฌ ํŒจํ„ด
Part IV: MAX ๊ทธ๋ž˜ํ”„
17 - ์ปค์Šคํ…€ Opโœ…โœ…โœ…MAX ๊ทธ๋ž˜ํ”„ ํ†ตํ•ฉ
18 - ์†Œํ”„ํŠธ๋งฅ์Šคโœ…โœ…โœ…MAX ๊ทธ๋ž˜ํ”„ ํ†ตํ•ฉ
19 - ์–ดํ…์…˜โœ…โœ…โœ…MAX ๊ทธ๋ž˜ํ”„ ํ†ตํ•ฉ
Part V: PyTorch ํ†ตํ•ฉ
20 - Torch ๋ธŒ๋ฆฟ์ง€โœ…โœ…โŒPyTorch ํ†ตํ•ฉ
21 - ์˜คํ† ๊ทธ๋ž˜๋“œโœ…โœ…โŒPyTorch ํ†ตํ•ฉ
22 - ํ“จ์ „โœ…โœ…โŒPyTorch ํ†ตํ•ฉ
Part VI: ํ•จ์ˆ˜ํ˜• ํŒจํ„ด
23 - ํ•จ์ˆ˜ํ˜•โœ…โœ…โœ…๊ณ ๊ธ‰ Mojo ํŒจํ„ด
Part VII: ์›Œํ”„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
24 - ์›Œํ”„ ํ•ฉ๊ณ„โœ…โœ…โœ…์›Œํ”„ ์ˆ˜์ค€ ์—ฐ์‚ฐ
25 - ์›Œํ”„ ํ†ต์‹ โœ…โœ…โœ…์›Œํ”„ ์ˆ˜์ค€ ์—ฐ์‚ฐ
26 - ๊ณ ๊ธ‰ ์›Œํ”„โœ…โœ…โœ…์›Œํ”„ ์ˆ˜์ค€ ์—ฐ์‚ฐ
Part VIII: ๋ธ”๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐ
27 - ๋ธ”๋ก ์—ฐ์‚ฐโœ…โœ…โœ…๋ธ”๋ก ๋‹จ์œ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด
Part IX: ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ
28 - ๋น„๋™๊ธฐ ๋ฉ”๋ชจ๋ฆฌโœ…โœ…โœ…๊ณ ๊ธ‰ ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์‚ฐ
29 - ๋ฐฐ๋ฆฌ์–ดโœ…โŒโŒNVIDIA ์ „์šฉ ๊ณ ๊ธ‰ ๋™๊ธฐํ™”
Part X: ์„ฑ๋Šฅ ๋ถ„์„
30 - ํ”„๋กœํŒŒ์ผ๋งโœ…โŒโŒNVIDIA ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ (NSight)
31 - ์ ์œ ์œจโœ…โŒโŒNVIDIA ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ
32 - ๋ฑ…ํฌ ์ถฉ๋Œโœ…โŒโŒNVIDIA ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ
Part XI: ์ตœ์‹  GPU ๊ธฐ๋Šฅ
33 - ํ…์„œ ์ฝ”์–ดโœ…โŒโŒNVIDIA ํ…์„œ ์ฝ”์–ด ์ „์šฉ
34 - ํด๋Ÿฌ์Šคํ„ฐโœ…โŒโŒNVIDIA ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฒ”๋ก€

  • โœ… ์ง€์›: ํ•ด๋‹น ํ”Œ๋žซํผ์—์„œ ํผ์ฆ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค
  • โŒ ๋ฏธ์ง€์›: ํ”Œ๋žซํผ๋ณ„ ๊ณ ์œ  ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

ํ”Œ๋žซํผ๋ณ„ ์ฐธ๊ณ ์‚ฌํ•ญ

NVIDIA GPU (์ „์ฒด ์ง€์›)

  • ๋ชจ๋“  ํผ์ฆ(1-34)์ด CUDA๋ฅผ ์ง€์›ํ•˜๋Š” NVIDIA GPU์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค
  • CUDA ํˆดํ‚ท๊ณผ ํ˜ธํ™˜ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค
  • ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€์žฅ ์™„์ „ํ•œ ํ•™์Šต ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค

AMD GPU (ํญ๋„“์€ ์ง€์›)

  • ๋Œ€๋ถ€๋ถ„์˜ ํผ์ฆ(1-8, 11-29)์ด ROCm์„ ํ†ตํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค
  • ๋ฏธ์ง€์›: ๋””๋ฒ„๊น… ๋„๊ตฌ(9-10), ํ”„๋กœํŒŒ์ผ๋ง(30-32), ํ…์„œ ์ฝ”์–ด(33-34)
  • ๊ณ ๊ธ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํŒจํ„ด๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํญ๋„“๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

Apple GPU (๊ธฐ๋ณธ ์ง€์›)

  • ๊ธฐ์ดˆ(1-8, 11-18) ๋ฐ ๊ณ ๊ธ‰(23-27) ํผ์ฆ ์ผ๋ถ€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
  • ๋ฏธ์ง€์›: ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ์ „๋ฐ˜, ๋””๋ฒ„๊น…, ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ
  • GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ ํŒจํ„ด์„ ์ตํžˆ๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค

ํ–ฅํ›„ ์ง€์› ๊ณ„ํš: AMD ๋ฐ Apple GPU์— ๋Œ€ํ•œ ๋„๊ตฌ์™€ ํ”Œ๋žซํผ ์ง€์›์„ ๊พธ์ค€ํžˆ ํ™•๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ๋„๊ตฌ, ํ”„๋กœํŒŒ์ผ๋ง ๊ธฐ๋Šฅ, ๊ณ ๊ธ‰ GPU ์—ฐ์‚ฐ ๋“ฑ ์•„์ง ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ์„ ๊ณ„์† ๊ฐœ์„ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.

GPU ๋ฆฌ์†Œ์Šค

๋ฌด๋ฃŒ ํด๋ผ์šฐ๋“œ GPU ํ”Œ๋žซํผ

๋กœ์ปฌ GPU๊ฐ€ ์—†๋‹ค๋ฉด, ๋ฌด๋ฃŒ๋กœ GPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Google Colab

Google Colab์€ ๋ฌด๋ฃŒ GPU ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, Mojo GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ์ผ๋ถ€ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ GPU:

  • Tesla T4 (๊ตฌ์„ธ๋Œ€ Turing ์•„ํ‚คํ…์ฒ˜)
  • Tesla V100 (์ œํ•œ์  ๊ฐ€์šฉ)

Mojo GPU Puzzles ์‚ฌ์šฉ ์‹œ ์ œํ•œ์‚ฌํ•ญ:

  • ๊ตฌ์„ธ๋Œ€ GPU ์•„ํ‚คํ…์ฒ˜: T4 GPU๋Š” ๊ณ ๊ธ‰ Mojo GPU ๊ธฐ๋Šฅ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ์„ธ์…˜ ์‹œ๊ฐ„ ์ œํ•œ: ์ตœ๋Œ€ 12์‹œ๊ฐ„ ์‹คํ–‰ ํ›„ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋Š๊น๋‹ˆ๋‹ค
  • ์ œํ•œ์  ๋””๋ฒ„๊น… ์ง€์›: NVIDIA ๋””๋ฒ„๊น… ๋„๊ตฌ(ํผ์ฆ 9-10)๋ฅผ ์™„์ „ํžˆ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ํŒจํ‚ค์ง€ ์„ค์น˜ ์ œํ•œ: Mojo/MAX ์„ค์น˜ ์‹œ ์šฐํšŒ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ์„ฑ๋Šฅ ์ œํ•œ: ๊ณต์œ  ์ธํ”„๋ผ ํŠน์„ฑ์ƒ ์ผ๊ด€๋œ ๋ฒค์น˜๋งˆํ‚น์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค

์ถ”์ฒœ ์šฉ๋„: ๊ธฐ๋ณธ GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…(ํผ์ฆ 1-8, 11-15)๊ณผ ๊ธฐ์ดˆ ํŒจํ„ด ํ•™์Šต.

Kaggle Notebooks

Kaggle์€ Colab๋ณด๋‹ค ๋„‰๋„‰ํ•œ ๋ฌด๋ฃŒ GPU ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ GPU:

  • Tesla T4 (์ฃผ๋‹น 30์‹œ๊ฐ„ ๋ฌด๋ฃŒ)
  • P100 (์ œํ•œ์  ๊ฐ€์šฉ)

Colab ๋Œ€๋น„ ์žฅ์ :

  • ๋„‰๋„‰ํ•œ ์‹œ๊ฐ„: Colab์˜ ์ผ์ผ ์„ธ์…˜ ์ œํ•œ๊ณผ ๋‹ฌ๋ฆฌ ์ฃผ๋‹น 30์‹œ๊ฐ„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ž๋™ ์ €์žฅ: ๋…ธํŠธ๋ถ์ด ์ž๋™์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค
  • ์•ˆ์ •์ ์ธ ํ™˜๊ฒฝ: ํŒจํ‚ค์ง€ ์„ค์น˜๊ฐ€ ๋” ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค

Mojo GPU Puzzles ์‚ฌ์šฉ ์‹œ ์ œํ•œ์‚ฌํ•ญ:

  • GPU ์•„ํ‚คํ…์ฒ˜ ์ œ์•ฝ: T4์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” Colab๊ณผ ๋™์ผ
  • ์ œํ•œ์  ๋””๋ฒ„๊น… ๋„๊ตฌ: NVIDIA ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ ๋””๋ฒ„๊น… ๋„๊ตฌ(ํผ์ฆ 9-10, 30-32) ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • Mojo ์„ค์น˜ ๋ณต์žก์„ฑ: Mojo ํ™˜๊ฒฝ์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฏธ์ง€์›: ๊ณ ๊ธ‰ ํผ์ฆ(33-34) ์ž‘๋™ ๋ถˆ๊ฐ€

์ถ”์ฒœ ์šฉ๋„: ๊ธฐ๋ณธ GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ(ํผ์ฆ 1-16)์„ ์žฅ์‹œ๊ฐ„์— ๊ฑธ์ณ ํ•™์Šตํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ์žฅ ์‚ฌํ•ญ

  • ์ „์ฒด ํ•™์Šต ๊ณผ์ •: NVIDIA GPU๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋“  ํผ์ฆ์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ „์ฒด 34๊ฐœ)
  • ํญ๋„“์€ ํ•™์Šต: AMD GPU๋กœ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (34๊ฐœ ์ค‘ 27๊ฐœ)
  • ๊ธฐ์ดˆ ํ•™์Šต: Apple GPU๋กœ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (34๊ฐœ ์ค‘ 13๊ฐœ)
  • ๋ฌด๋ฃŒ ํ”Œ๋žซํผ ํ•™์Šต: Google Colab/Kaggle๋กœ ๊ธฐ์ดˆ~์ค‘๊ธ‰ ๊ฐœ๋…๊นŒ์ง€ ํ•™์Šต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค (ํผ์ฆ 1-16)
  • ๋””๋ฒ„๊น… ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง: ๋””๋ฒ„๊น… ๋„๊ตฌ์™€ ์„ฑ๋Šฅ ๋ถ„์„์—๋Š” NVIDIA GPU๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค
  • ์ตœ์‹  GPU ๊ธฐ๋Šฅ: ํ…์„œ ์ฝ”์–ด์™€ ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” NVIDIA GPU๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

๊ฐœ๋ฐœ

์ž์„ธํ•œ ๋‚ด์šฉ์€ README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌํ•˜๊ธฐ

์—…๋ฐ์ดํŠธ ๊ตฌ๋… Modular ํฌ๋Ÿผ Discord

์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ , ํ’€์ด๋ฅผ ๊ณต์œ ํ•˜๊ณ , ์„œ๋กœ ๋„์›€์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.