fastai
4 minute read
fastai를 사용하여 모델을 트레이닝하는 경우, W&B는 WandbCallback
을 사용하여 쉽게 통합할 수 있습니다. 예제가 포함된 대화형 문서에서 자세한 내용을 살펴보세요 →
가입 및 API 키 생성
API 키는 사용자의 머신을 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.
- 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
- User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
- Reveal을 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고칩니다.
wandb
라이브러리 설치 및 로그인
로컬에서 wandb
라이브러리를 설치하고 로그인하려면 다음을 수행합니다.
-
WANDB_API_KEY
환경 변수를 API 키로 설정합니다.export WANDB_API_KEY=<your_api_key>
-
wandb
라이브러리를 설치하고 로그인합니다.pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
WandbCallback
을 learner
또는 fit
메서드에 추가
import wandb
from fastai.callback.wandb import *
# wandb run 로깅 시작
wandb.init(project="my_project")
# 하나의 트레이닝 단계에서만 로깅하려면
learn.fit(..., cbs=WandbCallback())
# 모든 트레이닝 단계에서 지속적으로 로깅하려면
learn = learner(..., cbs=WandbCallback())
WandbCallback 인수
WandbCallback
은 다음 인수를 허용합니다.
Args | Description |
---|---|
log | 모델의 다음 항목을 기록할지 여부: gradients , parameters , all 또는 None (기본값). 손실 및 메트릭은 항상 기록됩니다. |
log_preds | 예측 샘플을 기록할지 여부 (기본값은 True ). |
log_preds_every_epoch | 에포크마다 예측을 기록할지 또는 마지막에 기록할지 여부 (기본값은 False ) |
log_model | 모델을 기록할지 여부 (기본값은 False). 이 옵션은 SaveModelCallback 도 필요합니다. |
model_name | 저장할 file 이름으로, SaveModelCallback 을 재정의합니다. |
log_dataset |
참고: 하위 폴더 “models"는 항상 무시됩니다. |
dataset_name | 기록된 데이터셋의 이름 (기본값은 folder name ). |
valid_dl | 예측 샘플에 사용되는 항목을 포함하는 DataLoaders (기본값은 learn.dls.valid 의 임의 항목). |
n_preds | 기록된 예측 수 (기본값은 36). |
seed | 임의 샘플을 정의하는 데 사용됩니다. |
커스텀 워크플로우의 경우 데이터셋과 모델을 수동으로 기록할 수 있습니다.
log_dataset(path, name=None, metadata={})
log_model(path, name=None, metadata={})
참고: 모든 하위 폴더 “models"는 무시됩니다.
분산 트레이닝
fastai
는 컨텍스트 관리자 distrib_ctx
를 사용하여 분산 트레이닝을 지원합니다. W&B는 이를 자동으로 지원하며 Multi-GPU Experiments를 즉시 추적할 수 있습니다.
이 최소 예제를 검토하세요.
import wandb
from fastai.vision.all import *
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback
wandb.require(experiment="service")
path = rank0_first(lambda: untar_data(URLs.PETS) / "images")
def train():
dls = ImageDataLoaders.from_name_func(
path,
get_image_files(path),
valid_pct=0.2,
label_func=lambda x: x[0].isupper(),
item_tfms=Resize(224),
)
wandb.init("fastai_ddp", entity="capecape")
cb = WandbCallback()
learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
with learn.distrib_ctx(sync_bn=False):
learn.fit(1)
if __name__ == "__main__":
train()
그런 다음 터미널에서 다음을 실행합니다.
$ torchrun --nproc_per_node 2 train.py
이 경우 머신에 2개의 GPU가 있습니다.
이제 노트북 내에서 직접 분산 트레이닝을 실행할 수 있습니다.
import wandb
from fastai.vision.all import *
from accelerate import notebook_launcher
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback
wandb.require(experiment="service")
path = untar_data(URLs.PETS) / "images"
def train():
dls = ImageDataLoaders.from_name_func(
path,
get_image_files(path),
valid_pct=0.2,
label_func=lambda x: x[0].isupper(),
item_tfms=Resize(224),
)
wandb.init("fastai_ddp", entity="capecape")
cb = WandbCallback()
learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
with learn.distrib_ctx(in_notebook=True, sync_bn=False):
learn.fit(1)
notebook_launcher(train, num_processes=2)
메인 프로세스에서만 로그
위의 예에서 wandb
는 프로세스당 하나의 run을 시작합니다. 트레이닝이 끝나면 두 개의 run이 생성됩니다. 이는 혼란스러울 수 있으며 메인 프로세스에서만 로그할 수 있습니다. 이렇게 하려면 어떤 프로세스에 있는지 수동으로 감지하고 다른 모든 프로세스에서 run 생성을 피해야 합니다 (wandb.init
호출).
import wandb
from fastai.vision.all import *
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback
wandb.require(experiment="service")
path = rank0_first(lambda: untar_data(URLs.PETS) / "images")
def train():
cb = []
dls = ImageDataLoaders.from_name_func(
path,
get_image_files(path),
valid_pct=0.2,
label_func=lambda x: x[0].isupper(),
item_tfms=Resize(224),
)
if rank_distrib() == 0:
run = wandb.init("fastai_ddp", entity="capecape")
cb = WandbCallback()
learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
with learn.distrib_ctx(sync_bn=False):
learn.fit(1)
if __name__ == "__main__":
train()
터미널에서 다음을 호출합니다.
$ torchrun --nproc_per_node 2 train.py
import wandb
from fastai.vision.all import *
from accelerate import notebook_launcher
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback
wandb.require(experiment="service")
path = untar_data(URLs.PETS) / "images"
def train():
cb = []
dls = ImageDataLoaders.from_name_func(
path,
get_image_files(path),
valid_pct=0.2,
label_func=lambda x: x[0].isupper(),
item_tfms=Resize(224),
)
if rank_distrib() == 0:
run = wandb.init("fastai_ddp", entity="capecape")
cb = WandbCallback()
learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
with learn.distrib_ctx(in_notebook=True, sync_bn=False):
learn.fit(1)
notebook_launcher(train, num_processes=2)
Examples
- Visualize, track, and compare Fastai models: 자세한 설명이 포함된 연습
- Image Segmentation on CamVid: 통합의 샘플 유스 케이스
[i18n] feedback_title
[i18n] feedback_question
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.