artifact 생성 및 로깅
"""
W&B artifact를 생성하고 로깅합니다. 먼저 artifact
객체를 생성합니다. 다음으로, 파일, 디렉토리 또는 외부 레퍼런스를 artifact에 추가합니다.
마지막으로, artifact를 W&B run에 로깅합니다.
"""
import wandb
# artifact 객체 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
# artifact에 하나 이상의 파일 추가
artifact.add_file(local_path="data/file1.csv")
# artifact에 디렉토리를 재귀적으로 추가
artifact.add_dir(local_path="data/directory")
# artifact에 외부 URI 레퍼런스 추가
artifact.add_reference(uri="s3://my-bucket/path/to/data.csv")
with wandb.init(project="<project>") as run:
# 트레이닝 및 로깅 코드를 여기에 작성
# artifact 로깅 예시
run.log_artifact(artifact)
클라우드 저장소 버킷 경로에 레퍼런스를 추가해 외부 artifact를 추적하기
"""
클라우드 저장소 bucket 경로에 레퍼런스를 추가하여 외부 artifact를 추적합니다.
"""
import wandb
# artifact 객체 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
# bucket 경로에 레퍼런스 추가
artifact.add_reference(uri = "uri/to/your/bucket/path")
# W&B run 초기화
with wandb.init(project="<project>") as run:
# artifact 메타데이터 로깅
run.log_artifact(artifact)
run에서 특정 artifact 버전 삭제하기
"""
W&B run에서 특정 artifact 버전을 삭제합니다. artifact에 alias가 연결되어 있으면
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 이름과 버전 <artifact_name>:v<version_number>으로
# 구성된 artifact 버전 목록을 반환합니다.
for artifact_version in runs.logged_artifacts():
# 버전 번호에 해당하는 artifact 버전 이름(str)의 마지막 두 문자를 인덱싱합니다.
if artifact_version.name[-2:] == "v"+ "<version_number>":
artifact_version.delete(delete_aliases=True)
artifact collection 삭제하기
"""
W&B에서 artifact collection을 삭제합니다.
"""
import wandb
# W&B API 초기화
api = wandb.Api()
# 이름과 유형으로 artifact collection 삭제
# 이름 형식: <entity>/<project>/<run_path>
collection = api.artifact_collection(
name="<entity>/<project>/<run_path>",
type_name="<artifact_type>"
)
collection.delete()
Artifacts에서 특정 파일 또는 하위 폴더 다운로드
"""
W&B artifacts에서 특정 파일 또는 하위 폴더를 다운로드합니다. 동일한
로직이 외부 artifacts에도 적용됩니다.
"""
import wandb
with wandb.init(project="<project>") as run:
# 사용할 artifact를 지정합니다. 형식은 "name:alias"입니다.
artifact = run.use_artifact("<artifact_name>:<alias>")
# 특정 파일 또는 하위 폴더를 다운로드합니다.
artifact.download(path_prefix="<file_name>") # 지정된 파일 또는 폴더만 다운로드합니다.
파일이나 artifact 전체 다운로드
"""
W&B에서 파일 또는 전체 artifact를 다운로드합니다. 동일한
로직이 외부 artifact에도 적용됩니다.
"""
import wandb
with wandb.init(project="<project>") as run:
# 사용할 artifact를 지정합니다. 형식은 "name:alias"입니다.
artifact = run.use_artifact("<artifact_name>:<alias>")
# 경로 이름으로 artifact에서 파일을 다운로드합니다.
# artifact.add_reference()가 사용된 경우, 레퍼런스 URL을 반환합니다.
entry = artifact.get_entry("<file_name>")
# 전체 artifact를 다운로드합니다.
datadir = artifact.download()
artifact를 로깅할 때 alias를 하나 이상 추가하기
"""
artifact를 W&B에 logging할 때 하나 이상의 alias를 추가합니다.
"""
import wandb
# artifact 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
# artifact에 파일 추가
artifact.add_file("<file_path>")
with wandb.init(project="<project>") as run:
# alias와 함께 artifact 로깅
run.log_artifact(artifact, aliases=["<alias1>", "<alias2>"])
기존 artifact에 alias 추가하기
"""
기존 W&B artifact에 alias를 추가합니다.
"""
import wandb
# 기존 artifact를 조회하고 alias를 추가합니다
artifact = wandb.Api().artifact("entity/project/artifact:version")
artifact.aliases = ["<new-alias>"]
artifact.save()
artifact를 로깅할 때 태그 추가하기
"""
W&B에 artifact를 logging할 때 태그를 추가합니다.
"""
import wandb
# artifact 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
# 태그와 함께 artifact logging
with wandb.init(project="<project>") as run:
run.log_artifact(artifact, tags=["<tag1>", "<tag2>"])
기존 artifact에 태그 추가
"""
기존 W&B artifact에 태그를 추가합니다.
"""
import wandb
# 기존 artifact를 조회하고 태그를 추가합니다
artifact = wandb.Api().artifact("entity/project/artifact:version")
artifact.tags = ["new-tag"]
artifact.save()
TTL policy가 적용된 artifact 생성 및 로깅
"""
W&B에서 TTL policy를 적용하여 artifact를 생성하고 log합니다.
"""
import wandb
from datetime import timedelta
# TTL policy를 적용하여 artifact 생성
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
artifact.add_file("<file_path>")
artifact.ttl = timedelta(days=30) # TTL policy 설정
with wandb.init(project="<project>", entity="<entity>") as run:
# TTL을 적용하여 artifact log
run.log_artifact(artifact)
기존 artifact의 TTL policy 업데이트하기
"""
W&B에서 기존 artifact의 TTL policy를 업데이트합니다.
"""
import wandb
from datetime import timedelta
# W&B API 초기화
api = wandb.Api()
# 기존 artifact 조회
artifact = api.artifact("<entity/project/artifact:alias>")
# TTL policy를 추가하거나 업데이트합니다. 원하는 기간을 지정하세요.
artifact.ttl = timedelta(days=365) # 1년 후 삭제
# 업데이트된 artifact 저장
artifact.save()
run 내에서 기존 artifact의 설명 업데이트하기
"""
W&B run 내에서 기존 W&B artifact의 설명을 업데이트합니다.
이 코드는 W&B run을 초기화하고, 이름과 alias로 지정된 artifact를 조회한 후,
설명을 업데이트하고 변경 사항을 저장합니다.
"""
import wandb
with wandb.init(entity="<entity>", project="<project>") as run:
# 이름과 alias로 artifact 조회
artifact = run.use_artifact(artifact_or_name="<artifact>:<alias>")
# artifact 설명 업데이트
artifact.description = "<description>"
# 업데이트된 artifact 저장
artifact.save()
기존 artifact의 설명, 메타데이터, alias를 새 run을 생성하지 않고 업데이트하기
"""
기존 artifact의 설명, 메타데이터, alias를 새로운 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"}
# alias 추가
artifact.aliases.append("best")
# alias 제거
artifact.aliases.remove("latest")
# alias 전체 교체
artifact.aliases = ["replaced"]
# 모든 artifact 변경 사항 저장
artifact.save()