메인 콘텐츠로 건너뛰기
*레퍼런스 아티팩트(reference artifacts)*를 사용하여 W&B 서버 외부에 저장된 파일을 추적하고 사용할 수 있습니다. 일반적인 외부 스토리지 솔루션에는 CoreWeave AI Object Storage, Amazon Simple Storage Service(Amazon S3) 버킷, GCS 버킷, Azure Blob, HTTP 파일 서버 또는 NFS 공유 등이 있습니다. 레퍼런스 아티팩트는 일반 아티팩트와 거의 동일하게 동작합니다. 핵심 차이점은 레퍼런스 아티팩트에는 파일 크기, MD5 체크섬과 같은 파일에 대한 메타데이터만 포함된다는 점입니다. 파일 자체는 사용자의 시스템을 벗어나지 않습니다. 레퍼런스 아티팩트는 일반 아티팩트와 비슷한 방식으로 사용할 수 있습니다. W&B App에서 파일 브라우저를 사용하여 레퍼런스 아티팩트의 내용을 탐색하고, 전체 의존성 그래프를 살펴보고, 아티팩트의 버전 이력을 검토할 수 있습니다. 다만 데이터 자체가 아티팩트에 포함되어 있지 않기 때문에, UI에서는 이미지, 오디오와 같은 리치 미디어를 렌더링할 수 없습니다.
외부 파일을 추적하지 않는 아티팩트를 로깅하면, W&B는 아티팩트의 파일을 W&B 서버에 저장합니다. 이는 W&B Python SDK로 아티팩트를 로깅할 때의 기본 동작입니다.외부 파일을 추적하는 아티팩트를 로깅하면, W&B는 객체의 ETag, 크기와 같은 메타데이터를 로깅합니다. 버킷에서 객체 버저닝이 활성화되어 있다면, 버전 ID도 함께 로깅됩니다.
다음 섹션에서는 외부 레퍼런스 아티팩트를 추적하는 방법을 설명합니다.

외부 버킷에서 아티팩트 추적하기

W&B Python SDK를 사용하여 W&B 외부에 저장된 파일에 대한 참조를 추적합니다.
  1. wandb.init()으로 run을 초기화합니다.
  2. wandb.Artifact()로 아티팩트 객체를 생성합니다.
  3. 아티팩트 객체의 wandb.Artifact.add_reference() 메서드를 사용해 버킷 경로에 대한 참조를 지정합니다.
  4. run.log_artifact()로 아티팩트의 메타데이터를 로깅합니다.
import wandb

# W&B run 초기화
with wandb.init(project="my-project") as run:

  # 아티팩트 객체 생성
  artifact = wandb.Artifact(name="name", type="type")

  # 버킷 경로 참조 추가
  artifact.add_reference(uri = "uri/to/your/bucket/path")

  # 아티팩트 메타데이터 로깅
  run.log_artifact(artifact)
예를 들어, 사용 중인 버킷의 디렉터리 구조가 다음과 같다고 가정해 보겠습니다:
s3://my-bucket

|datasets/
  |-- mnist/
|models/
  |-- cnn/
datasets/mnist/ 디렉터리에는 이미지 모음이 포함되어 있습니다. datasets/mnist/ 디렉터리의 이미지를 데이터셋 아티팩트로 추적하려면 다음과 같이 설정합니다:
  1. "mnist"와 같은 아티팩트 이름을 지정합니다.
  2. 아티팩트 객체를 생성할 때 type 파라미터를 "dataset"으로 설정합니다 (wandb.Artifact(type="dataset")).
  3. wandb.Artifact.add_reference()를 호출할 때 datasets/mnist/ 디렉터리 경로를 Amazon S3 URI(s3://my-bucket/datasets/mnist/)로 지정합니다.
  4. run.log_artifact()로 아티팩트를 기록합니다.
다음 코드 예제는 참조 아티팩트 mnist:latest를 생성합니다:
import wandb

with wandb.init(project="my-project") as run:
  artifact = wandb.Artifact(name="mnist", type="dataset")
  artifact.add_reference(uri="s3://my-bucket/datasets/mnist")
  run.log_artifact(artifact)
W&B App 안에서 파일 브라우저를 사용해 참조 아티팩트의 내용을 살펴보고, 전체 의존성 그래프를 탐색하며, 아티팩트의 버전 히스토리를 훑어볼 수 있습니다. 아티팩트 자체에 실제 데이터가 포함되어 있지 않기 때문에, W&B App은 이미지, 오디오 등과 같은 리치 미디어를 렌더링하지 않습니다.
W&B Artifacts는 CoreWeave Storage와 MinIO를 포함한 모든 Amazon S3 호환 인터페이스를 지원합니다. 아래에 설명된 스크립트는 AWS_S3_ENDPOINT_URL 환경 변수를 CoreWeave Storage 또는 MinIO 서버를 가리키도록 설정하면 두 제공자 모두에서 별도의 수정 없이 그대로 동작합니다.
기본적으로 W&B는 오브젝트 접두사를 추가할 때 오브젝트 10,000개 제한을 적용합니다. wandb.Artifact.add_reference()를 호출할 때 max_objects=를 지정하여 이 한도를 조정할 수 있습니다.

외부 버킷에서 아티팩트 다운로드하기

W&B는 아티팩트를 기록할 때 저장된 메타데이터를 사용하여, 참조 아티팩트를 다운로드할 때 원본 버킷에서 파일을 가져옵니다. 버킷에 객체 버저닝이 활성화되어 있다면, W&B는 아티팩트가 기록되던 시점의 파일 상태에 해당하는 객체 버전을 가져옵니다. 버킷의 내용을 계속 변경하더라도, 아티팩트가 트레이닝 run 중 버킷 상태의 스냅샷 역할을 하기 때문에, 특정 모델이 트레이닝될 때 사용된 데이터의 정확한 버전에 언제든지 접근할 수 있습니다. 다음 코드 예시는 참조 아티팩트를 다운로드하는 방법을 보여줍니다. 아티팩트를 다운로드하는 API는 참조 아티팩트와 비참조 아티팩트 모두에 대해 동일합니다:
import wandb

with wandb.init(project="my-project") as run:
  artifact = run.use_artifact("mnist:latest", type="dataset")
  artifact_dir = artifact.download()
워크플로의 일부로 파일을 덮어쓰는 경우, 스토리지 버킷에서 ‘Object Versioning’을 활성화할 것을 W&B가 권장합니다.Object Versioning이 활성화되어 있으면, 아티팩트가 로깅된 이후 파일이 덮어쓰였더라도 아티팩트를 다운로드할 때 W&B가 항상 올바른 버전의 파일을 가져올 수 있습니다.사용 사례에 따라 객체 버저닝을 활성화하는 방법은 다음 안내서를 참조하세요: AWS, Google Cloud, Azure.

버킷에서 외부 리소스를 추가하고 다운로드하기

다음 코드 예시는 Amazon S3 버킷에 데이터셋을 업로드한 다음 이를 참조 아티팩트로 추적하고, 다시 다운로드합니다.
import boto3
import wandb

with wandb.init() as run:
  # 트레이닝 중...

  s3_client = boto3.client("s3")
  s3_client.upload_file(file_name="my_model.h5", bucket="my-bucket", object_name="models/cnn/my_model.h5")

  # 모델 아티팩트 로그
  model_artifact = wandb.Artifact("cnn", type="model")
  model_artifact.add_reference("s3://my-bucket/models/cnn/")
  run.log_artifact(model_artifact)
나중에 모델 아티팩트를 다운로드할 수 있습니다. 아티팩트 이름과 유형을 지정하세요:
import wandb

with wandb.init() as run:
  artifact = run.use_artifact(artifact_or_name = "cnn", type="model")
  datadir = artifact.download()
Google Cloud 또는 Azure에서 참조 방식으로 아티팩트를 추적하는 방법을 엔드 투 엔드로 설명한 워크스루는 다음 리포트를 참고하세요:

클라우드 스토리지 자격 증명

W&B는 사용 중인 클라우드 제공자를 기준으로 자격 증명을 찾기 위해 해당 클라우드의 기본 방법을 사용합니다. 사용되는 자격 증명에 대해 더 알아보려면 클라우드 제공자의 문서를 참조하세요:
Cloud providerCredentials Documentation
CoreWeave AI Object StorageCoreWeave AI Object Storage documentation
AWSBoto3 documentation
Google CloudGoogle Cloud documentation
AzureAzure documentation
AWS의 경우, 버킷이 설정된 사용자의 기본 리전에 있지 않다면 버킷 리전과 일치하도록 AWS_REGION 환경 변수를 설정해야 합니다.
이미지, 오디오, 비디오, 포인트 클라우드와 같은 리치 미디어는 버킷의 CORS 설정에 따라 App UI에서 렌더링에 실패할 수 있습니다. 버킷의 CORS 설정에서 app.wandb.ai를 allowlist에 추가하면 W&B App이 이러한 리치 미디어를 올바르게 렌더링할 수 있습니다.이미지, 오디오, 비디오, 포인트 클라우드와 같은 리치 미디어가 App UI에서 렌더링되지 않는 경우, 버킷의 CORS 정책에서 app.wandb.ai가 allowlist에 포함되어 있는지 확인하세요.

파일 시스템에서 아티팩트 추적하기

데이터셋에 접근하는 일반적인 방식은 트레이닝 작업을 실행하는 모든 머신에 원격 파일 시스템을 NFS 마운트 포인트로 연결하는 것입니다. 이는 클라우드 스토리지 버킷을 사용하는 것에 대한 대안이 될 수 있으며, 트레이닝 스크립트 입장에서는 파일이 로컬 파일 시스템에 있는 것처럼 보입니다. 파일 시스템에서 아티팩트를 추적하려면:
  1. wandb.init()으로 run을 초기화합니다.
  2. wandb.Artifact()로 아티팩트 객체를 생성합니다.
  3. 아티팩트 객체의 wandb.Artifact.add_reference() 메서드를 사용해 파일 시스템 경로에 대한 참조를 지정합니다.
  4. run.log_artifact()로 아티팩트의 메타데이터를 로깅합니다.
마운트된 파일 시스템에서 파일을 추적하려면 다음 코드 스니펫을 복사해서 붙여넣습니다. 꺾쇠 괄호(< >)로 둘러싸인 값을 사용자 값으로 바꾸세요.
import wandb

# run 초기화
with wandb.init(entity="<entity>", project="<project>") as run:

  # 아티팩트 객체 생성
  artifact = wandb.Artifact(name="<name>", type="<type>")

  # 파일시스템 경로 참조 추가
  artifact.add_reference("file:///path/to/dataset/")

  # 아티팩트 로깅 (메타데이터만)
  run.log_artifact(artifact)
URL의 트리플 슬래시(///)에 주목하세요. 첫 번째 구성 요소는 파일 시스템 참조를 사용함을 나타내는 file:// 접두사입니다. 두 번째 구성 요소는 파일 시스템의 루트인 /입니다. 나머지 구성 요소는 추적하려는 디렉터리 또는 파일의 경로입니다. 예를 들어, /mount에 다음과 같은 구조의 파일 시스템이 마운트되어 있다고 가정해 봅시다:
mount
|datasets/
  |-- mnist/
|models/
  |-- cnn/
datasets/mnist/ 디렉터리를 데이터셋 아티팩트로 추적하려고 합니다. 이를 추적하려면 다음 코드 스니펫을 사용할 수 있습니다.
import wandb

with wandb.init() as run:
  artifact = wandb.Artifact("mnist", type="dataset")
  artifact.add_reference("file:///mount/datasets/mnist/")
  run.log_artifact(artifact)
이렇게 하면 /mount/datasets/mnist/ 아래에 저장된 파일들을 가리키는 참조 아티팩트 mnist:latest가 생성됩니다.
기본적으로 W&B는 디렉터리에 대한 참조를 추가할 때 파일 수를 10,000개로 제한합니다. wandb.Artifact.add_reference()를 호출할 때 max_objects=를 지정해 이 제한을 조정할 수 있습니다.
마찬가지로 models/cnn/my_model.h5에 저장된 모델을 추적하려면 다음 코드 스니펫을 사용할 수 있습니다:
import wandb

with wandb.init() as run:

  # 여기서 트레이닝...

  # 모델을 디스크에 저장

  # 아티팩트 객체 생성
  model_artifact = wandb.Artifact("cnn", type="model")

  # 모델 파일 경로에 대한 참조 추가
  model_artifact.add_reference("file:///mount/cnn/my_model.h5")

  # W&B에 아티팩트 로그
  run.log_artifact(model_artifact)

외부 파일 시스템에서 아티팩트 다운로드

참조된 파일 시스템에서 파일을 다운로드할 때도 일반(비참조) 아티팩트와 동일한 API를 사용합니다.
  1. wandb.init()으로 run을 초기화합니다.
  2. wandb.Run.use_artifact() 메서드를 사용하여 다운로드하려는 아티팩트를 지정합니다.
  3. 아티팩트의 wandb.Artifact.download() 메서드를 호출해 참조된 파일 시스템에서 파일을 다운로드합니다.
with wandb.init() as run:
  artifact = run.use_artifact("entity/project/mnist:latest", type="dataset")
  artifact_dir = artifact.download()
W&B는 /mount/datasets/mnist의 내용을 artifacts/mnist:v0/ 디렉터리로 복사합니다.
Artifact.download()는 아티팩트를 재구성할 수 없으면 오류를 던집니다. 예를 들어, 아티팩트에 덮어쓴 파일에 대한 참조가 포함되어 있는 경우, 아티팩트를 더 이상 재구성할 수 없기 때문에 Artifact.download()는 오류를 던집니다.