메인 콘텐츠로 건너뛰기
단일 run을 사용하거나 분산된 Runs를 통해 협업하여 새로운 Artifacts 버전을 생성할 수 있습니다. 선택적으로 incremental artifact로 알려진 이전 버전으로부터 새로운 Artifacts 버전을 생성할 수도 있습니다.
원본 Artifacts의 크기가 상당히 크고, Artifacts 내의 파일 중 일부 서브셋에만 변경 사항을 적용해야 하는 경우에는 incremental artifact를 생성하는 것을 권장합니다.

처음부터 새로운 Artifacts 버전 생성하기

새로운 Artifacts 버전을 생성하는 방법은 단일 run에서 생성하는 방법과 분산된 Runs에서 생성하는 방법 두 가지가 있습니다. 정의는 다음과 같습니다:
  • Single run: 단일 run이 새 버전에 필요한 모든 데이터를 제공합니다. 가장 일반적인 경우이며, run이 필요한 데이터를 완전히 다시 생성할 때 가장 적합합니다. 예: 저장된 Models를 출력하거나 분석을 위해 테이블에 모델 prediction을 기록하는 경우.
  • Distributed runs: 일련의 Runs가 공동으로 새 버전에 필요한 모든 데이터를 제공합니다. 보통 병렬로 데이터를 생성하는 여러 Runs가 있는 분산 작업에 가장 적합합니다. 예: 분산 방식으로 모델을 평가하고 예측값을 출력하는 경우.
W&B 프로젝트에 존재하지 않는 이름을 wandb.Artifact API에 전달하면 새로운 Artifacts를 생성하고 v0 에일리어스를 할당합니다. 동일한 Artifacts에 다시 로그를 남기면 W&B는 콘텐츠의 체크섬을 확인합니다. Artifacts가 변경된 경우, W&B는 새 버전인 v1을 저장합니다. 프로젝트에 기존 Artifacts와 일치하는 이름과 Artifacts 타입을 wandb.Artifact API에 전달하면 W&B는 기존 Artifacts를 가져옵니다. 가져온 Artifacts의 버전은 1보다 크게 됩니다.
Artifact workflow comparison

Single run

Artifacts 내의 모든 파일을 생성하는 단일 run으로 새로운 버전의 Artifacts를 로그합니다. 이 케이스는 하나의 run이 Artifacts의 모든 파일을 생성할 때 발생합니다. 사용자의 유스 케이스에 따라 아래 탭 중 하나를 선택하여 run 내부 또는 외부에서 새로운 Artifacts 버전을 생성하세요.
W&B run 내에서 Artifacts 버전 생성하기:
  1. wandb.init으로 run을 생성합니다.
  2. wandb.Artifact로 새로운 Artifacts를 생성하거나 기존 것을 가져옵니다.
  3. .add_file을 사용하여 Artifacts에 파일을 추가합니다.
  4. .log_artifact를 사용하여 run에 Artifacts를 로그합니다.
with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")

    # `.add`, `.add_file`, `.add_dir`, `.add_reference`를 사용하여
    # Artifacts에 파일 및 에셋을 추가합니다.
    artifact.add_file("image1.png")
    run.log_artifact(artifact)

Distributed runs

여러 Runs가 버전을 커밋하기 전에 공동으로 작업할 수 있도록 합니다. 이는 하나의 run이 새 버전의 모든 데이터를 제공하는 위에서 설명한 단일 run 모드와 대조됩니다.
  1. 동일한 버전에 대해 협업하려면 컬렉션의 각 run이 동일한 고유 ID(distributed_id)를 알고 있어야 합니다. 기본적으로 W&B는 wandb.init(group=GROUP)으로 설정된 run의 groupdistributed_id로 사용합니다.
  2. 버전을 “커밋”하여 상태를 영구적으로 잠그는 최종 run이 있어야 합니다.
  3. 협업 중인 Artifacts에 추가하려면 upsert_artifact를 사용하고, 커밋을 완료하려면 finish_artifact를 사용하세요.
다음 예를 살펴보세요. 서로 다른 Runs(Run 1, Run 2, Run 3)가 upsert_artifact를 사용하여 동일한 Artifacts에 서로 다른 이미지 파일을 추가합니다.

Run 1:

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # `.add`, `.add_file`, `.add_dir`, `.add_reference`를 사용하여
    # Artifacts에 파일 및 에셋을 추가합니다.
    artifact.add_file("image1.png")
    run.upsert_artifact(artifact, distributed_id="my_dist_artifact")

Run 2:

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # `.add`, `.add_file`, `.add_dir`, `.add_reference`를 사용하여
    # Artifacts에 파일 및 에셋을 추가합니다.
    artifact.add_file("image2.png")
    run.upsert_artifact(artifact, distributed_id="my_dist_artifact")

Run 3

Run 1과 Run 2가 완료된 후 실행되어야 합니다. finish_artifact를 호출하는 Run은 Artifacts에 파일을 포함할 수도 있지만, 반드시 포함해야 하는 것은 아닙니다.
with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # Artifacts에 파일 및 에셋을 추가합니다.
    # `.add`, `.add_file`, `.add_dir`, `.add_reference`
    artifact.add_file("image3.png")
    run.finish_artifact(artifact, distributed_id="my_dist_artifact")

기존 버전으로부터 새로운 Artifacts 버전 생성하기

변경되지 않은 파일을 다시 인덱싱할 필요 없이, 이전 Artifacts 버전에서 파일의 서브셋을 추가, 수정 또는 제거할 수 있습니다. 이전 Artifacts 버전에서 파일의 서브셋을 추가, 수정 또는 제거하여 새로운 Artifacts 버전을 생성하는 것을 incremental artifact라고 합니다.
Incremental artifact versioning
다음은 발생할 수 있는 각 유형의 점진적 변경에 대한 시나리오입니다.
  • add: 새로운 배치를 수집한 후 데이터셋에 새로운 파일 서브셋을 주기적으로 추가합니다.
  • remove: 여러 중복 파일을 발견하여 Artifacts에서 제거하려고 합니다.
  • update: 파일 서브셋에 대한 어노테이션을 수정하여 기존 파일을 올바른 파일로 교체하려고 합니다.
incremental artifact와 동일한 기능을 수행하기 위해 Artifacts를 처음부터 생성할 수도 있습니다. 그러나 Artifacts를 처음부터 생성할 때는 Artifacts의 모든 콘텐츠가 로컬 디스크에 있어야 합니다. 점진적 변경을 수행할 때는 이전 Artifacts 버전의 파일을 변경하지 않고도 단일 파일을 추가, 제거 또는 수정할 수 있습니다.
단일 run 또는 일련의 Runs(분산 모드)를 통해 incremental artifact를 생성할 수 있습니다.
Artifacts를 점진적으로 변경하려면 다음 절차를 따르세요:
  1. 점진적 변경을 수행하려는 Artifacts 버전을 가져옵니다.
saved_artifact = run.use_artifact("my_artifact:latest")
  1. 다음을 사용하여 드래프트를 생성합니다:
draft_artifact = saved_artifact.new_draft()
  1. 다음 버전에 반영하려는 점진적 변경 사항을 수행합니다. 기존 엔트리를 추가, 제거 또는 수정할 수 있습니다.
각 변경 사항을 수행하는 방법에 대한 예시는 아래 탭 중 하나를 선택하세요.
add_file 메소드를 사용하여 기존 Artifacts 버전에 파일을 추가합니다.
draft_artifact.add_file("file_to_add.txt")
add_dir 메소드를 사용하여 디렉토리를 추가함으로써 여러 파일을 추가할 수도 있습니다.
  1. 마지막으로 변경 사항을 로그하거나 저장합니다. 다음 탭은 W&B run 내부 및 외부에서 변경 사항을 저장하는 방법을 보여줍니다. 유스 케이스에 적합한 탭을 선택하세요.
run.log_artifact(draft_artifact)
위의 코드 예시를 모두 합치면 다음과 같습니다:
with wandb.init(job_type="modify dataset") as run:
    saved_artifact = run.use_artifact(
        "my_artifact:latest"
    )  # Artifacts를 가져와 run에 입력합니다
    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
    )  # 변경 사항을 로그하여 새 버전을 생성하고 run의 출력으로 표시합니다