*레퍼런스 아티팩트(reference artifact)*를 사용하여 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 외부에 저장된 파일에 대한 참조를 추적합니다.
wandb.init()으로 실행을 초기화합니다.
wandb.Artifact()로 아티팩트 객체를 생성합니다.
- 아티팩트 객체의
wandb.Artifact.add_reference() 메서드를 사용하여 버킷 경로에 대한 참조를 지정합니다.
run.log_artifact()로 아티팩트의 메타데이터를 로깅합니다.
import wandb
# W&B 실행 초기화
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/ 디렉터리를 데이터셋 아티팩트로 추적하려면 다음과 같이 설정합니다:
"mnist"와 같은 아티팩트 이름을 지정합니다.
- 아티팩트 객체를 생성할 때
type 파라미터를 "dataset"으로 설정합니다 (wandb.Artifact(type="dataset")).
wandb.Artifact.add_reference()를 호출할 때 datasets/mnist/ 디렉터리의 경로를 Amazon S3 URI(s3://my-bucket/datasets/mnist/) 형태로 지정합니다.
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 아티팩트는 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는 아티팩트가 로깅되던 당시 파일 상태에 해당하는 객체 버전을 가져옵니다. 버킷의 내용이 계속 변경되더라도, 아티팩트가 학습 실행 중 버킷 상태를 스냅샷으로 보존하므로 특정 모델이 학습에 사용한 데이터의 정확한 버전을 언제든지 참조할 수 있습니다.
다음 코드 예시는 참조 아티팩트를 다운로드하는 방법을 보여줍니다. 아티팩트를 다운로드하기 위한 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는 권장합니다.버전 관리를 활성화하면, 아티팩트를 기록한 이후 파일이 덮어쓰였더라도 아티팩트를 다운로드할 때 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는 사용 중인 클라우드 제공자에 따라 자격 증명을 찾기 위해 해당 제공자의 기본 메커니즘을 사용합니다. 사용되는 자격 증명에 대해 자세히 알아보려면 클라우드 제공자의 문서를 참조하세요.
AWS의 경우, 버킷이 구성된 사용자의 기본 리전에 위치해 있지 않다면 버킷 리전에 맞도록 AWS_REGION 환경 변수를 설정해야 합니다.
이미지, 오디오, 비디오, 포인트 클라우드와 같은 리치 미디어는 버킷의 CORS 구성에 따라 App UI에서 렌더링되지 않을 수 있습니다. 버킷의 CORS 설정에서 app.wandb.ai를 허용 목록(allowlist)에 추가하면 W&B App에서 이러한 리치 미디어를 올바르게 렌더링할 수 있습니다.이미지, 오디오, 비디오, 포인트 클라우드와 같은 리치 미디어가 App UI에서 렌더링되지 않는 경우, 버킷의 CORS 정책에서 app.wandb.ai가 허용 목록에 포함되어 있는지 확인하세요.
데이터셋에 접근하는 일반적인 방식은 학습 작업을 실행하는 모든 머신에 원격 파일 시스템에 대한 NFS 마운트 지점을 제공하는 것입니다. 이는 클라우드 스토리지 버킷의 대안이 될 수 있으며, 학습 스크립트 관점에서는 해당 파일들이 로컬 파일 시스템에 있는 것처럼 보이기 때문입니다.
파일 시스템에서 아티팩트를 추적하려면:
wandb.init()으로 실행을 초기화합니다.
wandb.Artifact()로 아티팩트 객체를 생성합니다.
- 아티팩트 객체의
wandb.Artifact.add_reference() 메서드를 사용해 파일 시스템 경로에 대한 참조를 지정합니다.
run.log_artifact()로 아티팩트의 메타데이터를 로깅합니다.
마운트된 파일 시스템에 있는 파일을 추적하려면 다음 코드 스니펫을 복사해 붙여넣습니다. 꺾쇠 괄호(< >)로 둘러싸인 값을 사용자 환경에 맞는 값으로 교체하십시오.
import wandb
# 실행 초기화
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를 사용해 다운로드합니다.
wandb.init()으로 실행을 초기화합니다.
- 다운로드하려는 아티팩트를 지정하기 위해
wandb.Run.use_artifact() 메서드를 사용합니다.
- 아티팩트의
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()는 오류를 발생시킵니다.