MLOps (๋จธ์ ๋ฌ๋ ์ด์)

Design
๋จธ์ ๋ฌ๋์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ตฌ์ฑ์์ (configuration)
- Dataset : ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ํ์ต ์ํค๊ธฐ ์ํย ๋ฐ์ดํฐ.
- Metric : ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ธก์ ์ ์ํย ํ๊ฐ ์งํ.
- Model : ํด๊ฒฐํ๊ณ ์ ํ๋ Task์ ์ข ๋ฅ์ Data์ ํน์ฑ์ ๋ง๋ย ์๊ณ ๋ฆฌ์ฆ.
- Hyper-parameter : ๋ชจ๋ธ๋ง ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ์๊ฐย ์ง์ ์ธํ ํด์ฃผ๋ ๊ฐ.
Model development
์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด์๋ ์ฌ๋ฌ๊ฐ์ง hyper-parameter ๊ฐ์ ๋ณ๊ฒฝํ๋ฉฐย ๋ค์ํ ์คํ์ ํด์ผํจ
โ ์ฌ๋ฌ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๊ธฐ ์ํดย ์ ๋ฆฌํ๋ ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋ก์ธ ์ ์์
WandB
W and B (Weights & Biases)
โ ๋ฅ๋ฌ๋ ์คํ ๊ณผ์ ์ ์์ฝ๊ฒ Trackingํ๊ณ , ์๊ฐํํ ์ ์๋ Tool
- hyperparameter๋ณ ๊ฒฐ๊ณผ ๋น๊ต
- ํ์ต ๊ณผ์ visualization
- system ๋ชจ๋ํฐ๋ง
- ํ์
- ๊ณผ๊ฑฐ ์คํ parameter ๋ณต์

์ฐ์ wandb ํ์๊ฐ์ ์งํ (https://wandb.ai/site)
wandb install
bashpip install wandb pip3 install wandb # pip๊ฐ ์๋ค๊ณ ๋จ๋ฉด ์ด๊ฑธ๋ก
bashwandb login
๊ทธ ํ API Key๋ฅผ ์ ๋ ฅํ๋ผ๊ณ ํจ
โ ย https://wandb.ai/authorize ์์ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋จ
python# ๋ด API Key e60e3a61bebeec0beccabf93a087ef2fd3e8786f

Test
uailab-unist_ ์ด๋ฆ์ ํ์์ ๋ด Project๋ฅผ ๋ง๋ค์ด๋ณด๊ณ test ํด๋ณด๊ธฐ

Create new project๋ก ๋ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด์.

๊ทธ๋ผ ์ ํ๋ฉด์ฒ๋ผ ์น์ ํ๊ฒ ์ฒซ ์์ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋ค.
๋ก๊ทธ์ธ์ ์๊น ํ์ผ๋, ๋ค์ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์ง๋ณด์.
wandb.init ์ด ์ค์ํ๋ฏ๋ก ๋ค๋ฅธ ์ต์ ๋ ์ถ๊ฐํด๋ดค๋ค.
pythonimport wandb import random wandb.login() # start a new wandb run to track this script wandb.init( # ํ๋ก์ ํธ ์ด๋ฆ project="tinyllm_hoon", # ํ ๋๋ ์ฌ์ฉ์ ์ด๋ฆ # ์ด๊ฑฐ ์ ์๋๋๊ฑฐ์ง? # entity="hoonably", # ์คํ ์ด๋ฆ name="test1", # ์คํ์ ๋ํ ์ค๋ช notes="trainging test", # ์คํ์ ๊ทธ๋ฃนํํ๋ ํ๊ทธ tags=["tag1", "tag2"], # offline mode๋ก ์คํํ๋ ค๋ฉด mode="offline"์ผ๋ก ์ค์ # mode="online", # hyperparameter ์ค์ ๊ฐ config={ "learning_rate": 0.02, "architecture": "CNN", "dataset": "CIFAR-100", "epochs": 10, } ) # simulate training epochs = 10 offset = random.random() / 5 for epoch in range(2, epochs): acc = 1 - 2 ** -epoch - random.random() / epoch - offset loss = 2 ** -epoch + random.random() / epoch + offset # log metrics to wandb wandb.log({"acc": acc, "loss": loss}) # [optional] finish the wandb run, necessary in notebooks wandb.finish()

๋ค์๊ณผ ๊ฐ์ด ์ฑ๊ณตํ๋ฉด, wandb ๋ผ๋ ํด๋๊ฐ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ์์ฑ๋๋ฉฐ ๋ก๊ทธ๊ฐ ๋จ๋๋ค.

๋ํ ๋์์ wandb ํ์ด์ง์ ์จ๋ผ์ธ์ผ๋ก๋ ๊ฒฐ๊ณผ๊ฐ ์ ์ก๋์ด ์ ์ฅ๋๋ค.


๊ฒฐ๊ณผ
๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ ์ ์๋ค.

๊ฐ ๋ฐ์ดํฐ๊ฐ 10๊ฐ๋ง ๋ณด์ด๋๋ฐ,ํฑ๋๋ฐํด ๋๋ฅด๊ณ Max runs to show๋ฅผ ์ฌ๋ ค์ฃผ๋ฉด ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ๋ก ๋น๊ตํ ์ ์๋ค.

Tag์ ์ ๋ณด๋ฅผ ๋ฃ์
๋ค์๊ณผ ๊ฐ์ด ์ ๋ณด๋ฅผ ๋ฃ์ผ๋ฉด Tag๋ฅผ ๋๋ฌ ๋น๊ตํ๊ธฐ ์ข๋ค.
python# Device ์ค์ device = 'cuda' if torch.cuda.is_available() else 'cpu' # GPU ๋ชจ๋ธ๋ช ํ์ธ gpu_name = torch.cuda.get_device_name(0) ... run = wandb.init( project="TinyLLM", name=f"{model_name} in {dataset_name}", notes="", tags=[gpu_name, model_name, dataset_name], mode="online" )