wandb.Table을 사용하여 데이터를 로그하고 W&B에서 시각화 및 쿼리하세요. 이 가이드에서는 다음 방법을 배웁니다:
Tables 생성
Table을 정의하려면 데이터의 각 행에 대해 표시할 열(columns)을 지정합니다. 각 행은 트레이닝 데이터셋의 단일 아이템, 트레이닝 중의 특정 단계 또는 에포크, 테스트 아이템에 대한 모델의 예측값, 모델이 생성한 오브젝트 등이 될 수 있습니다. 각 열은 숫자, 텍스트, 불리언, 이미지, 비디오, 오디오 등의 고정된 타입을 가집니다. 타입을 미리 지정할 필요는 없습니다. 각 열에 이름을 지정하고, 해당 열 인덱스에는 해당 타입의 데이터만 전달하면 됩니다. 더 자세한 예시는 W&B Tables 가이드를 참조하세요.wandb.Table 생성자를 다음 두 가지 방법 중 하나로 사용하세요:
-
행 목록 (List of Rows):
이름이 지정된 열과 데이터 행을 로그합니다. 예를 들어 다음 코드 조각은 2개의 행과 3개의 열이 있는 테이블을 생성합니다:
-
Pandas DataFrame:
wandb.Table(dataframe=my_df)를 사용하여 DataFrame을 로그합니다. 열 이름은 DataFrame에서 추출됩니다.
기존 배열 또는 dataframe에서 생성
데이터 추가
Tables는 변경 가능(mutable)합니다. 스크립트가 실행됨에 따라 테이블에 최대 200,000행까지 데이터를 추가할 수 있습니다. 테이블에 데이터를 추가하는 방법은 두 가지입니다:- 행 추가 (Add a Row):
table.add_data("3a", "3b", "3c"). 새 행은 리스트로 표현되지 않음에 유의하세요. 행이 리스트 형식인 경우, 별표 표기법*를 사용하여 리스트를 위치 인수로 확장하세요:table.add_data(*my_row_list). 행은 테이블의 열 개수와 동일한 수의 항목을 포함해야 합니다. - 열 추가 (Add a Column):
table.add_column(name="col_name", data=col_data).col_data의 길이는 테이블의 현재 행 수와 같아야 합니다. 여기서col_data는 리스트 데이터 또는 NumPy NDArray일 수 있습니다.
점진적으로 데이터 추가하기
이 코드 샘플은 W&B 테이블을 점진적으로 생성하고 채우는 방법을 보여줍니다. 모든 가능한 레이블에 대한 신뢰도 점수를 포함하여 미리 정의된 열로 테이블을 정의하고, 추론 중에 행 단위로 데이터를 추가합니다. Runs를 재개할 때 테이블에 데이터를 점진적으로 추가할 수도 있습니다.재개된 Runs에 데이터 추가하기
Artifact에서 기존 테이블을 로드하고, 마지막 데이터 행을 검색한 뒤, 업데이트된 메트릭을 추가하여 재개된 Runs에서 W&B 테이블을 점진적으로 업데이트할 수 있습니다. 그런 다음 호환성을 위해 테이블을 다시 초기화하고 업데이트된 버전을 다시 W&B에 로그합니다.데이터 검색
데이터가 Table에 들어가면 열 또는 행별로 엑세스할 수 있습니다:- 행 이터레이터 (Row Iterator): 사용자는
for ndx, row in table.iterrows(): ...와 같은 Table의 행 이터레이터를 사용하여 데이터의 행을 효율적으로 반복할 수 있습니다. - 열 가져오기 (Get a Column): 사용자는
table.get_column("col_name")을 사용하여 데이터 열을 검색할 수 있습니다. 편의를 위해convert_to="numpy"를 전달하여 열을 기본 타입의 NumPy NDArray로 변환할 수 있습니다. 이는 열에wandb.Image와 같은 미디어 타입이 포함되어 있어 기본 데이터에 직접 엑세스하려는 경우에 유용합니다.
Tables 저장
스크립트에서 데이터 테이블(예: 모델 예측값 테이블)을 생성한 후, 결과를 실시간으로 시각화하기 위해 W&B에 저장하세요.Run에 테이블 로그하기
다음과 같이wandb.Run.log()를 사용하여 테이블을 Run에 저장합니다:
200,000행 이상을 로그하려면 다음을 사용하여 제한을 재정의할 수 있습니다:
wandb.Table.MAX_ARTIFACT_ROWS = X그러나 이 경우 UI에서 쿼리 속도가 느려지는 등 성능 문제가 발생할 수 있습니다.프로그램 방식으로 Tables 엑세스
백엔드에서 Tables는 Artifacts로 유지됩니다. 특정 버전에 엑세스하려는 경우 아티팩트 API를 사용하여 수행할 수 있습니다:Tables 시각화
이러한 방식으로 로그된 모든 테이블은 Run 페이지와 Project 페이지 모두의 Workspace에 표시됩니다. 자세한 내용은 Tables 시각화 및 분석을 참조하세요.Artifact 테이블
Workspace 대신 Run의 Artifacts 섹션에 테이블을 로그하려면artifact.add()를 사용하세요. 이는 한 번 로그한 후 향후 Runs에서 참조하고 싶은 데이터셋이 있는 경우 유용할 수 있습니다.
artifact.add()를 사용하는 자세한 예시는 이 Colab을 참조하고, Artifacts와 Tables를 사용하여 테이블 형식 데이터를 버전 관리하고 중복 제거하는 방법은 이 Reports를 참조하세요.
Artifact 테이블 조인 (Join)
wandb.JoinedTable(table_1, table_2, join_key)를 사용하여 로컬에서 생성한 테이블이나 다른 아티팩트에서 가져온 테이블을 조인할 수 있습니다.
| 인수 | 설명 |
|---|---|
| table_1 | (str, wandb.Table, ArtifactEntry) 아티팩트 내 wandb.Table의 경로, 테이블 오브젝트 또는 ArtifactEntry |
| table_2 | (str, wandb.Table, ArtifactEntry) 아티팩트 내 wandb.Table의 경로, 테이블 오브젝트 또는 ArtifactEntry |
| join_key | (str, [str, str]) 조인을 수행할 키 또는 키들 |
'original_songs'라는 원곡 테이블과 동일한 곡의 합성 버전인 'synth_songs'라는 다른 테이블을 읽는 방법을 보여줍니다. 코드는 두 테이블을 "song_id"를 기준으로 조인하고, 결과 테이블을 새로운 W&B Table로 업로드합니다: