참조 기반 아티팩트 추적
머신러닝을 위한 클라우드 데이터 버전 관리와 시각화 방법
이 글은 AI로 번역되었습니다. 오역이 있을 경우 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
클라우드에서 학습 데이터를 시각화하기
원격 스토리지 버킷에 있는 데이터를 W&B로 어떻게 추적하고 시각화할 수 있을까요? 다음은 이에 대한 단계별 안내입니다. 데이터셋과 예측 시각화 Google Cloud Platform(GCP)에 저장된 소규모 오디오 파일 데이터셋을 대상으로 합니다. 이 예시의 데이터셋은 몇 개의 원본 곡(.wav 파일)과 그 합성/재생성 버전(같은 멜로디를 다른 악기로 연주한 것)으로 구성되어 있으며, 자세한 내용은 다음을 참고하세요. 이 보고서 자세한 내용). AWS나 다른 클라우드 제공자를 사용한다면, 이 보고서에서 달라지는 부분은 버킷 설정과 파일 업로드/다운로드를 위한 제공자별 문법뿐입니다. 더 자세한 내용은 다음을 참조하세요. 참조 기반 아티팩트 가이드.
설정
이미 GCP 스토리지의 데이터를 사용해 학습 중이 아니라면:
- 올바른 권한을 설정하세요로컬 환경(원격 GPU 박스, 노트북 등)에서 원격 스토리지에 연결할 수 있도록 설정하세요: 사용하려는 특정 클라우드 스토리지 버킷에 대한 읽기/쓰기 권한을 갖추세요
- 올바른 라이브러리를 설치하세요 (예: google.cloud.storage) 및 올바른 액세스 키를 다운로드하세요 스크립트와 로컬 환경에서 읽기/쓰기 명령을 호출할 수 있도록 설정하기 위해서입니다
- 버킷의 메타데이터와 디렉터리 구조를 정리하세요 올바른 파일에 올바른 정보와 레이블을 연결할 수 있도록: 저는 CSV 파일을 사용합니다 (song_metadata.csv) 데이터셋의 모든 파일 이름을 id와 연관 메타데이터(각 녹음의 위치, 종, 날짜)와 함께 나열한 것입니다
- 객체 버전 관리를 활성화하세요(선택 사항)파일을 변경하거나 삭제한 뒤에도 내용을 복구할 수 있도록 하려면 다음을 활성화하세요 객체 버전 관리 이전에 GCP에서는 원격 버킷에 파일을 업로드하지 않고도 다음을 수행할 수 있습니다. 객체 버전 관리를 제어하기 ~을 통해 gsutil 또는 google.cloud.storage API.
참조로 아티팩트 만들기
외부를 통해 프로젝트의 원격 파일 시스템에서 데이터에 버전을 관리하세요 참조. 변경 사항 일반 W&B 아티팩트 로깅하기 최소화됩니다. 로컬 경로를 추가하는 대신, artifact.add_artifact([your local file path]), 원격 경로(일반적으로 URI)를 추가하고 artifact.add_reference([your remote path])
import wandbrun = wandb.init(project="songs", job_type="upload")# path to my remote data directory in Google Cloud Storagebucket = "gs://wandb-artifact-refs-public-test/whalesong"# create a regular artifactdataset_at = wandb.Artifact('sample_songs',type="raw_data")# creates a checksum for each file and adds a reference to the bucket# instead of uploading all of the contentsdataset_at.add_reference(bucket)run.log_artifact(dataset_at)

이 참조 버킷에 있는 파일 경로와 크기 목록입니다. 이는 W&B에 저장된 실제 파일이 아니라 콘텐츠에 대한 참조일 뿐이므로, 이 보기에서는 다운로드할 수 없습니다.
원격 버킋의 콘텐츠 변경하기
GCP 버킷에 노래 두 곡을 새로 추가했다고 가정해 봅시다. 다음번에 제가 호출하면 artifact.add_reference(bucket) 명령을 실행하면 파일 내용 수정 등 모든 변경 사항을 W&B가 감지하여 동기화합니다. The 비교 페이지 파일 차이(diff)를 보여줍니다(v1의 왼쪽에는 7곡, v0의 오른쪽에는 5곡). 또한 각 버전에 대해 alias를 업데이트하고 노트를 남겨 제가 어떤 변경을 했는지 기억해 둘 수 있습니다.


클라우드에서 데이터 다운로드하기
물론 참조 아티팩트에서 파일을 가져와 로컬에서 데이터를 사용할 수도 있습니다:
import wandbrun = wandb.init(project="songs", job_type="show_samples")dataset_at = run.use_artifact("sample_songs:latest")songs_dir = dataset_at.download()# all files available locally in songs_dir
참조 기반으로 데이터 시각화하기(베타)
원격 스토리지의 참조 경로(URI)를 통해 데이터와 예측을 시각화할 수 있습니다. 설정을 진행해 주세요. 데이터셋 시각화 테이블 데이터와 직접 상호작용하세요. 오디오 샘플을 듣고, 대용량 동영상을 재생하고, 이미지를 확인하는 등 다양한 작업을 수행할 수 있습니다. 이 방식이라면 로컬 저장 공간을 채울 필요도, 파일이 다운로드될 때까지 기다릴 필요도, 미디어를 다른 앱에서 열거나 파일 디렉터리의 여러 창/브라우저 탭을 오갈 필요도 없습니다.
이 예시에서는 제가 해양 포유류 발성을 GCP의 공개 스토리지 버킷에 수동으로 업로드했습니다. 전체 데이터셋은 다음에서 확인할 수 있습니다. Watkins 해양 포유류 음향 데이터베이스그리고 W&B에서 샘플 곡을 바로 재생할 수 있습니다.

아무 곡이나 재생/일시정지하고 추가 메타데이터를 확인하세요
학습 결과 업로드 및 시각화
입력 학습 데이터뿐 아니라, 학습 중간 산출물이나 최종 결과도 시각화하고 싶을 수 있습니다 결과: 모델이 학습 과정에서 생성한 예측, 서로 다른 하이퍼파라미터로 생성한 예시 등. 이런 결과를 기존 데이터 테이블에 조인하여 강력한 대화형 시각화와 탐색적 분석을 구성할 수 있습니다. 이 예시의 생성/합성 곡은 로컬에 있습니다 .wav Colab이나 로컬 개발 환경에서 생성한 파일. 각 파일은 원본과 연결됩니다 song_id 그리고 대상 instrument.
학습 중 생성된 모든 미디어를 추적하세요
모델 학습이나 평가 중에 생성된 파일을 업로드하고 버전 관리하는 방법은 여러 가지가 있습니다:
- W&B 아티팩트를 로깅하기 로컬에서 생성되는 파일을 즉시 추적하기(가장 간단한 방법, 파일 내용은 W&B에 저장됨)
- 로컬 파일을 원격 클라우드 버킷에 업로드하기, 두 가지 옵션:
- 프로그래밍 방식으로(예: 클라우드 제공업체 API를 통해, 예를 들어 google.cloud.storage)
- 또는 브라우저 UI에서 수동으로
- 파일에 발생한 모든 변경 사항을 버전으로 관리하기
- 원격 클라우드 버킷에서 버전 관리를 반드시 활성화하세요. 파일의 내용은 W&B에 저장되지 않기 때문에, 파일을 변경하거나 삭제했을 때 과거 버전을 복구하는 유일한 방법입니다. 참고로 버전 관리는 활성화되어 있어야 합니다. 이전에 버킷을 사용하기 시작한 후가 아니라, 버킷에 어떤 파일도 업로드하기 전에 설정하세요. 다음은 GCP에서 관련 단계.
- 호출 ref_artifact.add_reference(bucket) W&B가 원격 변경 사항을 감지하고 최신 버전을 동기화할 수 있도록, 버킷에 의미 있는 변경이 있을 때마다 실행하세요.
원격 버킷에 저장된 미디어와 상호작용하기

오디오 파일을 보고 상호작용하려면, 이를 직접 로그하여 wandb.Table 아티팩트와 연관되어 있습니다. 이는 로컬 파일이나 폴더를 아티팩트로 동기화하는 일반적인 경우와 매우 유사합니다. 다만 원격 파일을 시각화할 때에는 다음 두 가지 핵심 차이가 있습니다:
- 원격 아티팩트를 참조하기 사용 dataset_artifact.add_reference(remote_bucket) 대신 dataset_artifact.add_dir(local_dir) 원격 파일 모음을 추적하고 버전 관리하기
- 원격 디렉터리 트리를 순회하며 각 미디어 파일의 경로를 구성하기: 브라우저에서 이미지, 비디오, 노래(오디오 파일) 같은 미디어를 시각화하려면, 해당 타입에 맞는 wandb 객체로 감싸야 합니다. 이 경우에는 wandb.Audio()wandb 객체는 파일의 내용을 렌더링하기 위해 파일 경로를 입력값으로 받습니다. 이 파일들은 로컬에 없으므로, wandb 객체를 만들 때 원격 버킷에 있는 파일의 전체 경로를 그대로 전달하세요. 이 문법은 추후 더 단순화할 예정입니다.
합성 노래가 원격 버킷에 업로드되어 저장되어 있다고 가정할 때(수동이든 프로그래밍 방식이든 상관없이) 이를 렌더링하는 예시 코드:
import osimport wandbfrom google.cloud import storagerun = wandb.init(project="songs", job_type="log_synth")# full path to the specific folder of synthetic songs# (note the "gs://" prefix for Google Storage)synth_songs_bucket = "gs://wandb-artifact-refs-public-test/whalesong/synth"# root of the remote bucket (note, no "gs://" prefix)bucket_root = "wandb-artifact-refs-public-test"dataset_at = wandb.Artifact('synth_songs',type="generated_data")# track all the files in the specific folder of synthetic songsdataset_at.add_reference(synth_songs_bucket)# iterate over locations in GCP from the root of the bucketbucket_iter = storage.Client().get_bucket(bucket_root)song_data = []# focus on the synth songs folderfor synth_song in bucket_iter.list_blobs(prefix="whalesong/synth"):# filter out any non-audio filesif not synth_song.name.endswith(".wav"):continue# add a reference path for each song# song filenames have the form [string id]_[instrument].wavsong_name = synth_song.name.split("/")[-1]song_path = os.path.join(synth_songs_bucket, song_name)# create a wandb.Audio object to show the audio fileaudio = wandb.Audio(song_path, sample_rate=32)# extract instrument from the filenameorig_song_id, instrument = song_name.split("_")song_data.append([orig_song_id, song_name, audio, instrument.split(".")[0]])# create a table to hold audio samples and metadata in columnstable = wandb.Table(data=song_data,columns=["song_id", "song_name", "audio", "instrument"])# log the table via a new artifactsongs_at = wandb.Artifact("synth_samples", type="synth_ddsp")songs_at.add(table, "synth_song_samples")run.log_artifact(songs_at)
원격 미디어를 동적으로 분석하기
원격 미디어를 아티팩트의 시각화 테이블에 기록하고 나면, 개별 테이블을 동적으로 정렬, 그룹화, 필터링, 쿼리 및 기타 방식으로 처리할 수 있으며, 테이블 간 조인도 수행할 수 있습니다. 자세한 내용은 다음을 참고하세요 이 보고서그리고 원본과 합성 노래를 나란히 비교한 라이브 비��도 확인해 보세요:

추가 자료
질문이 있으신가요?
Add a comment