๋ฐฐ๊ฒฝ

๋ฐ์ด์ฝ˜์—์„œ ์ฃผ์ตœํ•˜๋Š” โ€œHAI(ํ•˜์ด)! - Hecto AI Challenge: 2025 ์ƒ๋ฐ˜๊ธฐ ํ—ฅํ†  ์ฑ„์šฉ AI ๊ฒฝ์ง„๋Œ€ํšŒโ€๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•ด๋‹น ๋Œ€ํšŒ์˜ ์ฃผ์ œ๋Š” ์ค‘๊ณ ์ฐจ ์ด๋ฏธ์ง€ ์ฐจ์ข… ๋ถ„๋ฅ˜ AI ๋ชจ๋ธ ๊ฐœ๋ฐœ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์ด 33,137์žฅ์œผ๋กœ ํ•™์Šต์…‹๋งŒ ๋Œ€๋žต 3.26GB๋ฅผ ์ฐจ์ง€ํ–ˆ๋‹ค(396๊ฐœ์˜ class). ํ˜„์žฌ ๋‚ด ๋กœ์ปฌ์—์„œ ๋ชจ๋ธ์„ fine-tuning์„ ํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ, AWS EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ตฌ์ถ•ํ•œ ํ™˜๊ฒฝ์—์„œ ํ•™์Šต ๋ฐ ์ถ”๋ก ์„ ์ง„ํ–‰ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ถ”๊ฐ€๋กœ, Git + CI/CD ๊ตฌ์„ฑ (GitHub Actions)์œผ๋กœ Push ์„œ๋ฒ„ SSH ์ ‘์† ์ตœ์‹  ์ฝ”๋“œ pull train.py ์˜ ์ž๋™ํ™”๊ฐ€ ์ ์šฉ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๊นŒ์ง€ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

์œ„ ๋ฐฐ๊ฒฝ์— ๊ทผ๊ฑฐํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ์‚ฌ์ „์— ์ƒ๊ฐํ–ˆ๋‹ค.

์‚ฌ์ „ ๊ตฌ์„ฑ ์š”์†Œ

ํ•ญ๋ชฉ์„ ํƒ ๋‚ด์šฉ
์„œ๋ฒ„AWS EC2 (g4dn.xlarge ๋“ฑ GPU ์ธ์Šคํ„ด์Šค)
๊ฐ€์ƒํ™˜๊ฒฝ ๊ด€๋ฆฌPoetry (๋กœ์ปฌ/์„œ๋ฒ„ ๋™์ผ ๊ด€๋ฆฌ)
๋ฐ์ดํ„ฐ ์ €์žฅEC2์— ์—ฐ๊ฒฐ๋œ EBS(Elastic Block Store)
์ฝ”๋“œ ๊ด€๋ฆฌGit + GitHub
์ „์†ก ๋ฐฉ์‹๋กœ์ปฌ ์„œ๋ฒ„: scp / GitHub ์„œ๋ฒ„: git pull
์‹คํ–‰ ํ™˜๊ฒฝpoetry run python train.py ๋˜๋Š” poetry shell
์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌํ•™์Šตํ•  ๋•Œ๋งŒ start, ๊ทธ ์™ธ์—” stop
๋ฐฑ์—…ํ•™์Šต ์‚ฐ์ถœ๋ฌผ์€ ํ•„์š” ์‹œ S3๋กœ ์—…๋กœ๋“œ ์˜ˆ์ •
GitHub Actions ์ž๋™ํ™”push EC2 ์ž๋™ start ํ•™์Šต๊นŒ์ง€ ์ž๋™
์‹คํ—˜ ๋กœ๊ทธ ์‹œ๊ฐํ™” & ๋ชจ๋‹ˆํ„ฐ๋งWandB or TensorBoard
ํ™˜๊ฒฝ ํ†ต์ผ์„ฑ ๊ทน๋Œ€ํ™”Docker ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆํ™”
ํ•™์Šต ์‚ฐ์ถœ๋ฌผ ์•ˆ์ •์  ๋ณด๊ด€S3 ์ž๋™ ๋ฐฑ์—…
์„œ๋ฒ„ ์ž๋™ ์ข…๋ฃŒ ์Šคํฌ๋ฆฝํŠธํ•™์Šต ์ข…๋ฃŒ ํ›„ ์ž๋™์œผ๋กœ stop ์ฒ˜๋ฆฌ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์„ค๊ณ„

your-project/
โ”œโ”€โ”€ dataset/                # ์„œ๋ฒ„์— ์˜ฎ๊ธด ์ด๋ฏธ์ง€ ํด๋”
โ”œโ”€โ”€ data/                   # ์ „์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ train.py            # ํ•™์Šต ์ง„์ž…์ 
โ”‚   โ”œโ”€โ”€ model.py            # ๋ชจ๋ธ ์ •์˜
โ”‚   โ”œโ”€โ”€ dataloader.py       # ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๊ด€๋ จ ํ•จ์ˆ˜
โ”‚   โ”œโ”€โ”€ utils.py            # ๊ธฐํƒ€ ์œ ํ‹ธ
โ”‚   โ””โ”€โ”€ config.yaml         # ์„ค์ • ๊ด€๋ฆฌ
โ”œโ”€โ”€ outputs/                # ํ•™์Šต ๊ฒฐ๊ณผ ์ €์žฅ ํด๋”
โ”œโ”€โ”€ pyproject.toml          # poetry ํ™˜๊ฒฝ ์„ค์ •
โ”œโ”€โ”€ poetry.lock             # ๋ฒ„์ „ ๊ณ ์ •
โ””โ”€โ”€ README.md               # ์„ค๋ช…

config.yaml๋กœ ์„ค์ • ๊ด€๋ฆฌ๋ฅผ ํ•˜์—ฌ ํ•˜๋“œ์ฝ”๋”ฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹คํ—˜์„ ์ถ”์ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

AWS EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

AWS ์ฝ˜์†”์—์„œ EC2 ์ƒ์„ฑ

  1. EC2 ๋Œ€์‹œ๋ณด๋“œ ์ง„์ž…

  2. ์ธ์Šคํ„ด์Šค ์‹œ์ž‘ ํด๋ฆญ

  3. ์„ค์ • ํ•ญ๋ชฉ:

    ํ•ญ๋ชฉ์„ค์ •
    AMIUbuntu 22.04
    ์ธ์Šคํ„ด์Šค ํƒ€์ž…g4dn.xlarge (GPU T4)
    ํ‚ค ํŽ˜์–ด์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด .pem ์‚ฌ์šฉ
    ์Šคํ† ๋ฆฌ์ง€100GB (gp2)
    ๋„คํŠธ์›Œํฌ๊ธฐ๋ณธ VPC๋กœ ์œ ์ง€
    ๋ณด์•ˆ ๊ทธ๋ฃนSSH(22) ํ—ˆ์šฉ๋งŒ ์šฐ์„  ์„ค์ •
  4. ์ธ์Šคํ„ด์Šค ์‹œ์ž‘

  5. ํผ๋ธ”๋ฆญ IPv4 ์ฃผ์†Œ ํ™•์ธ

vCPU ํ•œ๋„ ์ดˆ๊ณผ ๋ฌธ์ œ

You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.

์œ„ ์—๋Ÿฌ๋Š” ํ˜„์žฌ AWS ๊ณ„์ •์— ํ• ๋‹น๋œ vCPU ํ•œ๋„(Quota)๊ฐ€ 0์ด์–ด์„œ GPU ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์œ„ ์ฃผ์†Œ์— ๋“ค์–ด๊ฐ€์„œ Region์€ ap-northeast-2 (์„œ์šธ) ๋กœ, ํ•„ํ„ฐ ์ด๋ฆ„์€ Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์กฐ์ •ํ•œ ํ›„ ํ•œ๋„ ์š”์ฒญ์„ ํด๋ฆญํ•œ๋‹ค.

SSH ์ ‘์† ํ™•์ธ

# ๋กœ์ปฌ์—์„œ ์ ‘์†
ssh -i ~/path/to/your-key.pem ubuntu@<YOUR_EC2-PUBLIC_IP>

์ •์ƒ ์ ‘์†๋˜๋ฉด ubuntu@ip-xxx:~& ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์‰˜์ด ์—ด๋ฆผ

Poetry ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™˜๊ฒฝ ์„œ๋ฒ„ ๊ตฌ์„ฑ

Poetry ์„ค์น˜

curl -sSL https://install.python-poetry.org | python3 -

PATH ์„ค์ • (Ubuntu ๊ธฐ์ค€)

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

ํ™•์ธ:

poetry --version

์ถœ๋ ฅ์ด ๋‚˜์˜ค๋ฉด ์„ค์น˜ ์™„๋ฃŒ

Git์—์„œ ์ฝ”๋“œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

# ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹œ์ž‘
cd ~
git clone https://github.com/yourname/your-project.git
cd your-project

pyproject.toml, poetry.lock์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ

๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด์— ์ƒ์„ฑ

poetry config virtualenvs.in-project true

.venv/ ํด๋”๊ฐ€ ์ƒ๊ธฐ๊ณ , ์ด๊ฑธ๋กœ Dockerํ™”๋‚˜ ๊ฒฝ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฌ์›Œ์ง

๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์น˜

poetry install

ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๊ฐ€ ๋ชจ๋‘ ์„ค์น˜๋˜๊ณ , poetry ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋จ

ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ (ํ…Œ์ŠคํŠธ)

poetry run python src/train.py config.yaml