๋ฐฐ๊ฒฝ
๋ฐ์ด์ฝ์์ ์ฃผ์ตํ๋ โ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 ์์ฑ
-
์ธ์คํด์ค ์์ ํด๋ฆญ
-
์ค์ ํญ๋ชฉ:
ํญ๋ชฉ ์ค์ AMI Ubuntu 22.04 ์ธ์คํด์ค ํ์ g4dn.xlarge(GPU T4)ํค ํ์ด ์๋ก ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด .pem์ฌ์ฉ์คํ ๋ฆฌ์ง 100GB (gp2) ๋คํธ์ํฌ ๊ธฐ๋ณธ VPC๋ก ์ ์ง ๋ณด์ ๊ทธ๋ฃน SSH(22) ํ์ฉ๋ง ์ฐ์ ์ค์ -
์ธ์คํด์ค ์์
-
ํผ๋ธ๋ฆญ 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