단일 실행에서 또는 분산 실행과 협업하여 새 아티팩트 버전을 생성할 수 있습니다. 필요에 따라 이전 버전에서 새 아티팩트 버전을 만들 수 있으며, 이를 증분 아티팩트라고 합니다.
원본 아티팩트의 크기가 상당히 크고 그중 일부 파일에만 변경을 적용해야 할 때는 증분 아티팩트를 생성할 것을 권장합니다.
새로운 아티팩트 버전을 생성하는 방법은 단일 실행과 분산 실행, 두 가지가 있습니다. 각각은 다음과 같이 정의됩니다:
- 단일 실행: 하나의 실행이 새로운 버전에 필요한 모든 데이터를 제공합니다. 가장 일반적인 경우이며, 실행이 필요한 데이터를 완전히 재생성할 수 있을 때 가장 적합합니다. 예: 분석을 위해 저장된 모델이나 모델 예측을 테이블로 출력하는 경우.
- 분산 실행: 여러 실행이 함께 새로운 버전에 필요한 모든 데이터를 제공합니다. 여러 실행이 (종종 병렬로) 데이터를 생성하는 분산 작업에 가장 적합합니다. 예: 모델을 분산 방식으로 평가하고 예측값을 출력하는 경우.
프로젝트에 존재하지 않는 이름을 wandb.Artifact API에 전달하면, W&B는 새로운 아티팩트를 생성하고 v0 별칭을 할당합니다. 동일한 아티팩트에 다시 로그할 때 W&B는 내용에 대해 체크섬을 계산합니다. 아티팩트가 변경된 경우, W&B는 새로운 버전 v1을 저장합니다.
프로젝트에 이미 존재하는 아티팩트와 이름 및 아티팩트 타입이 일치하는 값을 wandb.Artifact API에 전달하면, W&B는 기존 아티팩트를 가져옵니다. 이렇게 가져온 아티팩트는 버전이 1보다 큽니다.
하나의 실행이 아티팩트에 포함된 모든 파일을 생성하는 경우, 해당 실행으로 아티팩트의 새 버전을 기록할 수 있습니다.
사용 사례에 따라 아래 탭 중 하나를 선택해, 실행 내부 또는 외부에서 새 아티팩트 버전을 생성합니다.
W&B 실행 내부에서 아티팩트 버전을 생성하려면:
wandb.init으로 실행을 생성합니다.
wandb.Artifact로 새 아티팩트를 생성하거나 기존 아티팩트를 가져옵니다.
.add_file로 아티팩트에 파일을 추가합니다.
.log_artifact로 실행에 아티팩트를 로그합니다.
with wandb.init() as run:
artifact = wandb.Artifact("artifact_name", "artifact_type")
# `.add`, `.add_file`, `.add_dir`, `.add_reference`를 사용해
# 파일과 에셋을 아티팩트에 추가합니다
artifact.add_file("image1.png")
run.log_artifact(artifact)
W&B 실행 외부에서 아티팩트 버전을 생성하려면:
wandb.Artifact로 새 아티팩트를 생성하거나 기존 아티팩트를 가져옵니다.
.add_file로 아티팩트에 파일을 추가합니다.
.save로 아티팩트를 저장합니다.
artifact = wandb.Artifact("artifact_name", "artifact_type")
# `.add`, `.add_file`, `.add_dir`, `.add_reference`를 사용해
# 파일과 에셋을 아티팩트에 추가합니다
artifact.add_file("image1.png")
artifact.save()
여러 실행이 커밋하기 전에 하나의 버전에 공동으로 작업할 수 있도록 합니다. 이는 새로운 버전에 필요한 모든 데이터를 하나의 실행이 제공하는, 위에서 설명한 단일 실행 모드와는 대조적입니다.
- 컬렉션에 속한 각 실행은 동일한 고유 ID(
distributed_id라 부름)를 알아야 동일한 버전에 협업할 수 있습니다. 기본적으로 존재하는 경우 W&B는 실행의 group 값( wandb.init(group=GROUP)으로 설정된 값)을 distributed_id로 사용합니다.
- 버전을 “커밋”하여 해당 상태를 영구적으로 고정하는 최종 실행이 하나 있어야 합니다.
upsert_artifact를 사용해 협업 아티팩트에 항목을 추가하고, finish_artifact로 커밋을 최종 확정합니다.
다음 예제를 살펴보세요. 서로 다른 실행(아래에서 실행 1, 실행 2, 실행 3으로 표시됨)이 upsert_artifact를 사용해 동일한 아티팩트에 서로 다른 이미지 파일을 추가합니다.
with wandb.init() as run:
artifact = wandb.Artifact("artifact_name", "artifact_type")
# 다음을 사용하여 아티팩트에 파일 및 에셋 추가:
# `.add`, `.add_file`, `.add_dir`, `.add_reference`
artifact.add_file("image1.png")
run.upsert_artifact(artifact, distributed_id="my_dist_artifact")
with wandb.init() as run:
artifact = wandb.Artifact("artifact_name", "artifact_type")
# `.add`, `.add_file`, `.add_dir`, `.add_reference`를 사용하여
# 아티팩트에 파일 및 에셋 추가
artifact.add_file("image2.png")
run.upsert_artifact(artifact, distributed_id="my_dist_artifact")
실행 1과 실행 2가 완료된 후에 실행해야 합니다. finish_artifact를 호출하는 실행은 아티팩트에 파일을 포함할 수도 있지만, 반드시 포함할 필요는 없습니다.
with wandb.init() as run:
artifact = wandb.Artifact("artifact_name", "artifact_type")
# 아티팩트에 파일 및 에셋 추가
# `.add`, `.add_file`, `.add_dir`, `.add_reference`
artifact.add_file("image3.png")
run.finish_artifact(artifact, distributed_id="my_dist_artifact")
변경되지 않은 파일을 다시 인덱싱하지 않고도 이전 아티팩트 버전에서 일부 파일을 추가, 수정 또는 제거할 수 있습니다. 이전 아티팩트 버전에서 일부 파일을 추가, 수정 또는 제거하면 _증분 아티팩트_라고 하는 새로운 아티팩트 버전이 생성됩니다.
다음은 발생할 수 있는 각 유형의 증분 변경에 대한 시나리오 예시입니다:
- add: 새 배치를 수집할 때마다 주기적으로 데이터셋에 새로운 파일 부분 집합을 추가합니다.
- remove: 아티팩트에서 여러 개의 중복 파일을 발견했고, 이를 제거하려고 합니다.
- 업데이트: 일부 파일의 어노테이션을 수정했고, 기존 파일을 수정된 파일로 교체하려는 경우입니다.
증분 아티팩트와 동일한 기능을 수행하기 위해 아티팩트를 처음부터 새로 만들 수도 있습니다. 그러나 아티팩트를 처음부터 새로 만들 경우, 아티팩트의 모든 콘텐츠가 로컬 디스크에 있어야 합니다. 증분 변경을 사용하면 이전 아티팩트 버전의 파일은 그대로 유지하면서 단일 파일을 추가, 제거 또는 수정할 수 있습니다.
단일 실행 내에서 또는 여러 실행(분산 모드)을 사용해 증분 아티팩트를 생성할 수 있습니다.
아티팩트를 점진적으로 변경하려면 아래 절차를 따르세요:
- 증분 변경을 적용할 아티팩트 버전을 가져옵니다:
saved_artifact = run.use_artifact("my_artifact:latest")
client = wandb.Api()
saved_artifact = client.artifact("my_artifact:latest")
- 다음을 지정해 초안을 만드세요:
draft_artifact = saved_artifact.new_draft()
- 다음 버전에 반영할 증분 변경 사항을 적용합니다. 기존 항목을 추가, 제거 또는 수정할 수 있습니다.
각 변경 사항의 수행 방법에 대한 예시를 보려면 탭을 선택하세요:
add_file 메서드를 사용하여 기존 아티팩트 버전에 파일을 추가합니다:draft_artifact.add_file("file_to_add.txt")
add_dir 메서드를 사용해 디렉터리를 추가하면 여러 파일을 한 번에 추가할 수도 있습니다.
remove 메서드를 사용하여 기존 아티팩트 버전에서 파일을 제거합니다:draft_artifact.remove("file_to_remove.txt")
디렉터리 경로를 전달하면 remove 메서드로 여러 파일을 한 번에 제거할 수도 있습니다.
드래프트에서 기존 콘텐츠를 제거한 다음 새 콘텐츠를 다시 추가하여 내용을 수정하거나 교체합니다:draft_artifact.remove("modified_file.txt")
draft_artifact.add_file("modified_file.txt")
- 마지막으로 변경 사항을 로그로 남기거나 저장하십시오. 다음 탭에서는 W&B 실행 내부와 외부에서 변경 사항을 저장하는 방법을 보여 줍니다. 사용 사례에 맞는 탭을 선택하십시오:
run.log_artifact(draft_artifact)
위의 내용을 모두 종합하면 코드 예시는 다음과 같습니다:
with wandb.init(job_type="modify dataset") as run:
saved_artifact = run.use_artifact(
"my_artifact:latest"
) # 아티팩트를 가져와 실행에 사용합니다
draft_artifact = saved_artifact.new_draft() # 드래프트 버전을 생성합니다
# 드래프트 버전에서 일부 파일을 수정합니다
draft_artifact.add_file("file_to_add.txt")
draft_artifact.remove("dir_to_remove/")
run.log_artifact(
draft_artifact
) # 변경 사항을 기록해 새 버전을 생성하고, 실행의 출력으로 지정합니다
client = wandb.Api()
saved_artifact = client.artifact("my_artifact:latest") # 아티팩트를 불러옵니다
draft_artifact = saved_artifact.new_draft() # 드래프트 버전을 생성합니다
# 드래프트 버전에서 일부 파일을 수정합니다
draft_artifact.remove("deleted_file.txt")
draft_artifact.add_file("modified_file.txt")
draft_artifact.save() # 드래프트에 변경 사항을 커밋합니다