트레이닝 run의 하이퍼파라미터나 데이터셋 Artifact를 생성하는 run의 전처리 방법처럼, run의 설정 정보가 담긴 딕셔너리입니다. 이를 run의 inputs라고 생각하면 됩니다.
run.history()
모델이 트레이닝되는 동안 loss처럼 변하는 값을 저장하는 딕셔너리 목록입니다. run.log() command는 이 객체에 값을 추가합니다.
run.summary
run의 결과를 요약한 정보가 담긴 딕셔너리입니다. accuracy, loss 같은 스칼라 값일 수도 있고 큰 파일일 수도 있습니다. 기본적으로 run.log()는 로깅된 시계열의 마지막 값으로 summary를 설정합니다. summary의 내용은 직접 설정할 수도 있습니다. summary를 run의 outputs라고 생각하면 됩니다.
과거 run의 데이터도 수정하거나 업데이트할 수 있습니다. 기본적으로 API 객체 인스턴스 하나가 모든 네트워크 요청을 캐시합니다. 실행 중인 스크립트에서 실시간 정보가 필요하다면 api.flush()를 호출해 업데이트된 값을 가져오세요.
기본 이력 방법에서는 메트릭을 고정된 개수의 샘플로 샘플링합니다(기본값은 500이며, samples __ 인수로 변경할 수 있습니다). 큰 run의 모든 데이터를 내보내려면 run.scan_history() 방법을 사용할 수 있습니다. 자세한 내용은 API 레퍼런스를 참조하세요.
이 예제 스크립트는 프로젝트를 찾아 name, 설정, summary 통계가 포함된 run CSV를 출력합니다. <entity>와 <project>를 각각 사용자의 W&B entity와 프로젝트 이름으로 바꾸세요.
import pandas as pdimport wandbapi = wandb.Api()entity, project = "<entity>", "<project>"runs = api.runs(entity + "/" + project)summary_list, config_list, name_list = [], [], []for run in runs: # .summary에는 # 정확도와 같은 메트릭의 출력 키/값이 포함됩니다. # 큰 파일을 제외하기 위해 ._json_dict를 호출합니다. summary_list.append(run.summary._json_dict) # .config에는 하이퍼파라미터가 포함됩니다. # _로 시작하는 특수 값은 제거합니다. config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")}) # .name은 사람이 읽을 수 있는 run 이름입니다. name_list.append(run.name)runs_df = pd.DataFrame( {"summary": summary_list, "config": config_list, "name": name_list})runs_df.to_csv("project.csv")run.finish()
W&B API는 api.runs()를 사용해 프로젝트의 여러 run에 걸쳐 쿼리하는 방법도 제공합니다. 가장 일반적인 사용 사례는 맞춤형 분석을 위해 run 데이터를 내보내는 것입니다. 쿼리 인터페이스는 MongoDB가 사용하는 방식과 같습니다.
api.runs를 호출하면 반복 가능한 Runs 객체가 반환되며, 목록처럼 동작합니다. 기본적으로 이 객체는 필요에 따라 한 번에 50개의 run을 순서대로 로드하지만, per_page 키워드 인수로 페이지당 로드할 개수를 변경할 수 있습니다.api.runs는 order 키워드 인수도 받습니다. 기본 정렬 순서는 -created_at입니다. 결과를 오름차순으로 정렬하려면 +created_at를 지정하세요. 설정이나 summary 값으로도 정렬할 수 있습니다. 예를 들어 summary.val_acc 또는 config.experiment_name입니다.
UI에서 run을 클릭한 다음 run 페이지의 Overview 탭을 클릭하면 최신 git 커밋을 확인할 수 있습니다. 이 정보는 wandb-metadata.json 파일에서도 확인할 수 있습니다. Public API를 사용하면 run.commit으로 git 해시를 조회할 수 있습니다.
wandb.init()를 호출한 후에는 스크립트에서 다음과 같이 무작위 run ID 또는 사람이 읽을 수 있는 run 이름에 액세스할 수 있습니다:
고유한 run ID(8자 해시): run.id
무작위 run 이름(사람이 읽기 쉬움): run.name
run에 유용한 식별자를 설정하는 방법을 고민하고 있다면, 다음을 권장합니다:
Run ID: 생성된 해시를 그대로 두세요. 이 값은 프로젝트의 모든 run에서 고유해야 합니다.
Run name: 짧고 읽기 쉬우며, 가능하면 고유한 값이어야 합니다. 그래야 차트의 서로 다른 선을 구분할 수 있습니다.
Run notes: run에서 무엇을 하고 있는지 간단히 설명하기에 아주 좋은 곳입니다. wandb.init(notes="여기에 노트 입력")로 설정할 수 있습니다.
Run tags: run tags에서 항목을 동적으로 추적하고, UI에서 필터를 사용해 table을 관심 있는 runs만 보이도록 좁혀 보세요. 스크립트에서 tags를 설정한 다음 UI에서 편집할 수 있으며, Runs table과 run 페이지의 Overview 탭 모두에서 가능합니다. 자세한 지침은 여기를 참조하세요.
run에서 특정 메트릭을 가져오려면 keys 인수를 사용하세요. run.history()를 사용할 때 기본 샘플 수는 500입니다. 특정 메트릭이 포함되지 않은 로깅된 step은 출력 데이터프레임에서 NaN으로 표시됩니다. keys 인수를 사용하면 API가 나열된 메트릭 키가 포함된 step을 더 자주 샘플링합니다.
import wandbapi = wandb.Api()run = api.run("<entity>/<project>/<run_id>")if run.state == "finished": for i, row in run.history(keys=["accuracy"]).iterrows(): print(row["_timestamp"], row["accuracy"])
백엔드에서 메트릭을 가져오는 속도가 느리거나 API 요청이 시간 초과되는 경우, 개별 요청이 시간 초과되지 않도록 scan_history의 페이지 크기를 줄여 볼 수 있습니다. 기본 페이지 크기는 500이므로, 가장 적합한 값을 찾을 수 있도록 다양한 크기를 사용해 볼 수 있습니다:
이 스크립트는 프로젝트의 run을 가져와 각 run의 이름, 설정, summary 통계를 포함한 데이터프레임과 CSV 파일을 생성합니다. <entity>와 <project>를 각각 W&B entity와 프로젝트 이름으로 바꾸세요.
import pandas as pdimport wandbapi = wandb.Api()entity, project = "<entity>", "<project>"runs = api.runs(entity + "/" + project)summary_list, config_list, name_list = [], [], []for run in runs: # .summary에는 정확도 등의 메트릭에 대한 # 출력 키/값이 포함되어 있습니다. # 대용량 파일을 제외하기 위해 ._json_dict를 호출합니다. summary_list.append(run.summary._json_dict) # .config에는 하이퍼파라미터가 포함되어 있습니다. # _로 시작하는 특수 값은 제거합니다. config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")}) # .name은 run의 사람이 읽을 수 있는 이름입니다. name_list.append(run.name)runs_df = pd.DataFrame( {"summary": summary_list, "config": config_list, "name": name_list})runs_df.to_csv("project.csv")