메인 콘텐츠로 건너뛰기
데이터 버전 관리를 위해 W&B Artifacts를 생성, 업데이트, 다운로드 및 관리합니다.

아티팩트 생성 및 로깅

"""
W&B 아티팩트를 생성하고 기록합니다. 먼저 아티팩트
객체를 생성합니다. 다음으로, 파일, 디렉토리 또는 외부 참조를 아티팩트에 추가합니다.
마지막으로, 아티팩트를 W&B run에 기록합니다.
"""
import wandb

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

# 아티팩트에 하나 이상의 파일 추가
artifact.add_file(local_path="data/file1.csv")

# 아티팩트에 디렉토리를 재귀적으로 추가
artifact.add_dir(local_path="data/directory")

# 아티팩트에 외부 URI 참조 추가
artifact.add_reference(uri="s3://my-bucket/path/to/data.csv")

with wandb.init(project="<project>") as run:
    # 트레이닝 및 로깅 코드를 여기에 작성

    # 아티팩트 로깅 예시
    run.log_artifact(artifact)

클라우드 스토리지 버킷 경로 참조를 추가하여 외부 아티팩트 추적

"""
클라우드 스토리지 버킷 경로에 대한 참조를 추가하여 외부 아티팩트를 추적합니다.
"""

import wandb

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

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

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

  # 아티팩트 메타데이터 로깅
  run.log_artifact(artifact)

run에서 특정 아티팩트 버전 삭제하기

"""
W&B run에서 특정 아티팩트 버전을 삭제합니다. 아티팩트에 별칭이 연결되어 있으면
delete_aliases를 `True`로 설정하세요.
"""
import wandb

# W&B API 초기화
api = wandb.Api()

# 경로로 run을 가져옵니다. <entity>/<project>/<run_path>로 구성됩니다.
runs = api.run("<entity>/<project>/<run_path>")

# wandb.Api().Run.logged_artifacts()는 아티팩트 이름과 버전 <artifact_name>:v<version_number>으로
# 구성된 아티팩트 버전 목록을 반환합니다.
for artifact_version in runs.logged_artifacts():
    # 버전 번호에 해당하는 아티팩트 버전 이름(str)의 마지막 두 문자를 인덱싱합니다.
    if artifact_version.name[-2:] == "v"+ "<version_number>":
        artifact_version.delete(delete_aliases=True)

아티팩트 컬렉션 삭제

"""
W&B에서 아티팩트 컬렉션을 삭제합니다.
"""
import wandb

# W&B API 초기화
api = wandb.Api()

# 이름과 유형으로 아티팩트 컬렉션 삭제
# 이름 형식: <entity>/<project>/<run_path>
collection = api.artifact_collection(
    name="<entity>/<project>/<run_path>",
    type_name="<artifact_type>"
)

collection.delete()

아티팩트에서 특정 파일이나 하위 폴더만 다운로드하기

"""
W&B Artifacts에서 특정 파일 또는 하위 폴더를 다운로드합니다. 동일한
로직이 외부 아티팩트에도 적용됩니다.
"""
import wandb

with wandb.init(project="<project>") as run:
    # 사용할 아티팩트를 지정합니다. 형식은 "name:alias"입니다.
    artifact = run.use_artifact("<artifact_name>:<alias>")

    # 특정 파일 또는 하위 폴더를 다운로드합니다.
    artifact.download(path_prefix="<file_name>") # 지정된 파일 또는 폴더만 다운로드합니다.

파일 또는 전체 아티팩트 다운로드하기

"""
W&B에서 파일 또는 전체 아티팩트를 다운로드합니다. 동일한
로직이 외부 아티팩트에도 적용됩니다.
"""

import wandb    

with wandb.init(project="<project>") as run:
    # 사용할 아티팩트를 지정합니다. 형식은 "name:alias"입니다.
    artifact = run.use_artifact("<artifact_name>:<alias>")

    # 경로 이름으로 아티팩트에서 파일을 다운로드합니다.
    # artifact.add_reference()를 사용한 경우 참조 URL을 반환합니다.
    entry = artifact.get_entry("<file_name>")

    # 전체 아티팩트를 다운로드합니다.
    datadir = artifact.download()

아티팩트를 로깅할 때 하나 이상의 별칭을 추가하기

"""
W&B에 아티팩트를 로깅할 때 하나 이상의 별칭을 추가합니다.
"""
import wandb

# 아티팩트 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
# 아티팩트에 파일 추가
artifact.add_file("<file_path>")

with wandb.init(project="<project>") as run:
    # 별칭과 함께 아티팩트 로깅
    run.log_artifact(artifact, aliases=["<alias1>", "<alias2>"])

기존 아티팩트에 별칭 추가

"""
기존 W&B 아티팩트에 별칭을 추가합니다.
"""
import wandb

# 기존 아티팩트를 검색하고 별칭을 추가합니다
artifact = wandb.Api().artifact("entity/project/artifact:version")
artifact.aliases = ["<new-alias>"]
artifact.save()

아티팩트를 로깅할 때 태그 추가

"""
W&B에 아티팩트를 로깅할 때 태그를 추가합니다.
"""
import wandb

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

# 태그와 함께 아티팩트 로깅
with wandb.init(project="<project>") as run:
    run.log_artifact(artifact, tags=["<tag1>", "<tag2>"])

기존 아티팩트에 태그를 추가하기

"""
기존 W&B 아티팩트에 태그를 추가합니다.
"""
import wandb

# 기존 아티팩트를 가져와 태그를 추가합니다
artifact = wandb.Api().artifact("entity/project/artifact:version")
artifact.tags = ["new-tag"]
artifact.save()

TTL 정책이 있는 아티팩트를 생성하고 로깅하기

"""
W&B에서 TTL 정책을 사용하여 아티팩트를 생성하고 기록합니다.
"""
import wandb
from datetime import timedelta

# TTL 정책을 사용하여 아티팩트 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
artifact.add_file("<file_path>")
artifact.ttl = timedelta(days=30)  # TTL 정책 설정

with wandb.init(project="<project>", entity="<entity>") as run:
    # TTL을 사용하여 아티팩트 기록
    run.log_artifact(artifact)

기존 아티팩트의 TTL 정책을 업데이트하기

"""
W&B에서 기존 아티팩트의 TTL 정책을 업데이트합니다.
"""
import wandb
from datetime import timedelta

# W&B API 초기화
api = wandb.Api()

# 기존 아티팩트 가져오기
artifact = api.artifact("<entity/project/artifact:alias>")

# TTL 정책을 추가하거나 업데이트합니다. 원하는 기간을 지정하세요.
artifact.ttl = timedelta(days=365)  # 1년 후 삭제

# 업데이트된 아티팩트 저장
artifact.save()

run 내에서 기존 아티팩트 설명 수정하기

"""
W&B run 내에서 기존 W&B 아티팩트의 설명을 업데이트합니다.

이 코드는 W&B run을 초기화하고, 이름과 별칭으로 지정된 아티팩트를 가져온 후,
설명을 업데이트하고 변경 사항을 저장합니다.
"""
import wandb

with wandb.init(entity="<entity>", project="<project>") as run:
    # 이름과 별칭으로 아티팩트 가져오기
    artifact = run.use_artifact(artifact_or_name="<artifact>:<alias>")
    # 아티팩트 설명 업데이트
    artifact.description = "<description>"
    # 업데이트된 아티팩트 저장
    artifact.save()

기존 아티팩트를 대상으로 새 run을 생성하지 않고 설명, 메타데이터, 별칭 업데이트하기

"""
기존 아티팩트의 설명, 메타데이터, 별칭을 새 run을 생성하지 않고 업데이트합니다.
"""
import wandb

api = wandb.Api()

artifact = api.artifact(name="<entity/project/artifact:alias>")

# 설명 업데이트
artifact.description = "My new description"

# 메타데이터 키 선택적 업데이트
artifact.metadata["oldKey"] = "new value"

# 메타데이터 전체 교체
artifact.metadata = {"newKey": "new value"}

# 별칭 추가
artifact.aliases.append("best")

# 별칭 제거
artifact.aliases.remove("latest")

# 별칭 전체 교체
artifact.aliases = ["replaced"]

# 모든 아티팩트 변경사항 저장
artifact.save()