본문으로 건너뛰기

데이터셋 처음부터 끝까지 (v1.2.1+)

학습 데이터셋을 만들고, 올리고, 버전으로 고정하고, 내려받는 한 바퀴를 순서대로 따라갑니다. 화면 캡처는 모두 실제 운영 환경에서 이 순서를 그대로 밟으며 찍은 것입니다.

각 절의 기능 설명은 학습 데이터셋CLI·Python 가이드 에 있습니다. 이 문서는 순서를 다룹니다.

준비물

필요한 것확인 방법
GenD 계정 (analyst 이상)로그인 후 사이드바에 학습 데이터셋 이 보이면 됩니다
워크스페이스 소속소속이 없으면 데이터셋을 만들 수 없습니다
Python 3.10+ (CLI 를 쓸 경우)python3 --version

:::info 권한을 새로 받았다면 2~3분 기다리세요 워크스페이스에 새로 추가됐다면 쿼리 엔진에 반영되기까지 동기화 주기가 있습니다. 그 전에는 적재가 실패할 수 있습니다 — 잠시 뒤 다시 시도하세요. :::

1단계 — 데이터셋 만들기 (UI)

사이드바 학습 데이터셋 으로 들어갑니다. 이미 있는 데이터셋 목록과 스토리지 사용량이 보입니다.

학습 데이터셋 목록

오른쪽 위 새 데이터셋 을 누릅니다.

새 데이터셋 다이얼로그

이름과 모달리티를 정합니다. 모달리티는 나중에 바꿀 수 없으니 올릴 데이터에 맞게 고르세요.

이름과 모달리티를 채운 상태

고를 것올릴 데이터
텍스트instruction JSONL — chat / prompt-response / DPO
이미지이미지 파일 또는 zip (HF imagefolder 구조)
비디오MP4 · WebM 개별 파일
이미지+텍스트아직 데이터를 넣을 수 없습니다#3258

:::warning 이미지+텍스트는 지금 고르지 마세요 생성은 되지만 어떤 경로로도 데이터를 넣을 수 없습니다. 업로드를 시도하면 400 이 납니다. 이미지와 캡션을 함께 다루려면 지금은 이미지 로 만들고 zip 안에 metadata.jsonl 로 캡션을 주세요. :::

생성 을 누르면 상세 화면으로 이동합니다. 화면 상단에 Iceberg 테이블 좌표 (iceberg.ws_<워크스페이스>.ds_...)가 표시됩니다 — SQL 편집기에서 그대로 조회할 수 있는 이름입니다.

2단계 — 데이터 올리기

UI 의 업로드 버튼으로도 되고, 스크립트에서는 CLI 가 편합니다.

CLI 설치

pip install "gend-cli @ git+https://github.com/genonai/DataX.git@main#subdirectory=apps/cli"
gend auth login # 브라우저 SSO

외부 학습 서버처럼 브라우저가 없는 곳은 개인 트래킹 키 를 씁니다.

텍스트 — 먼저 미리보기

텍스트는 적재 전에 --dry-run 으로 파싱 결과를 확인할 수 있습니다. 서브포맷을 잘못 추론했거나 파싱 오류가 있으면 여기서 드러납니다.

gend dataset upload <데이터셋ID> data.jsonl --dry-run
# data.jsonl: +0 rows (subformat=prompt_response, dup=0, parse_err=0)
# dry-run (미적재) 완료: rows +0 · 중복 스킵 0 · 파싱 오류 0

이상 없으면 --dry-run 을 빼고 실행합니다.

gend dataset upload <데이터셋ID> data.jsonl
# data.jsonl: +5 rows (subformat=prompt_response, dup=0, parse_err=0)
# 적재 완료: rows +5 · 중복 스킵 0 · 파싱 오류 0
# snapshot: 7763663159512757041 ← 3단계에서 씁니다

snapshot 값을 적어 두세요. 버전을 고정할 때 필요합니다.

:::tip HF TRL 형식을 그대로 받습니다 prompt+completion 으로 올려도 됩니다 — 저장 시 response 로 정규화되고 원본 키는 meta 에 보존됩니다. 키를 바꿔 쓸 필요가 없습니다. :::

이미지 — zip 폴더 구조가 split·label 이 됩니다

images.zip
├── train/cat/1.png → split=train, label=cat
├── train/dog/1.png → split=train, label=dog
└── valid/cat/1.png → split=validation (valid 는 자동 정규화)
gend dataset upload <데이터셋ID> images.zip
# 배치 1/1 — 1개 (1,509B)
# 업로드 완료: accepted 3 · rows +3 · 중복 스킵 4 · 거부 0

중복 스킵은 손실이 아닙니다. 같은 바이트의 이미지는 content_hash 로 한 번만 저장됩니다. 그래서 같은 명령을 다시 돌려도 안전합니다(멱등).

비디오 — 개별 파일로

gend dataset upload <데이터셋ID> clip.mp4
# 업로드 완료: accepted 1 · rows +1 · 중복 스킵 0 · 거부 0

:::warning 비디오는 zip 으로 올릴 수 없습니다 서버의 zip 추출 경로는 이미지 확장자만 훑습니다. 비디오 zip 은 오류 없이 0건으로 끝나 "올렸는데 아무것도 없는" 상태가 됩니다. 개별 파일로 올리세요. :::

확장자만 바꾼 파일은 거부됩니다 — 서버가 컨테이너 시그니처를 검사합니다.

gend dataset upload <데이터셋ID> fake.mp4
# 거부: fake.mp4: mp4 컨테이너 시그니처(ftyp)가 아닙니다

3단계 — 올라간 데이터 확인 (UI)

데이터셋 상세의 데이터 탭입니다.

텍스트는 표로 보입니다. split, content_hash, 각 필드가 그대로 나옵니다.

텍스트 데이터셋의 행 목록

이미지·비디오는 갤러리 보기가 기본입니다. 카드 아래에 라벨(없으면 split 배지)이 붙습니다. 오른쪽 위 토글로 표 보기로 바꿀 수 있고, 행 선택·삭제는 표 보기에서만 됩니다.

이미지 갤러리 — 라벨 표시

비디오 갤러리

비디오는 목록을 스크롤하는 동안 원본을 내려받지 않습니다 — 재생 버튼을 누른 클립만 로드됩니다.

4단계 — 버전 고정

데이터가 나중에 추가·삭제돼도 그 시점 그대로 조회되는 스냅샷을 만듭니다. "이 모델이 어느 데이터로 학습됐는지" 를 재현하려면 이 단계가 필요합니다.

UI 의 버전 탭에서 2단계의 snapshot ID 를 넣거나, API 로:

curl -X POST "$GEND_API_URL/api/v1/datasets/<데이터셋ID>/versions" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"snapshot_id":"7763663159512757041","note":"1차 학습용"}'
gend dataset versions <데이터셋ID>
# Version 1 · Snapshot 77636631… · Rows 10 · Note 1차 학습용

:::caution 새 행이 0건이면 snapshot 이 없습니다 올린 데이터가 전부 중복이면 서버가 새 snapshot 을 만들지 않습니다. CLI 가 snapshot 없음 — 새 행이 0건이라… 로 알려줍니다. 이때는 고정할 시점이 없는 것이 정상입니다. :::

5단계 — 내려받기

버전 번호로 내려받습니다. S3 자격증명은 필요 없습니다 — API 를 경유합니다.

gend dataset download <데이터셋ID> --version 1 -o ./out
# 저장 완료: ./out/<데이터셋이름>-v1.jsonl (3,747B, parts=1)

이미지·비디오 원본까지 받으려면 --with-blobs 를 붙이면 blobs/ 아래에 저장됩니다.

올린 것이 그대로 돌아오는지 확인

wc -l ./out/<데이터셋이름>-v1.jsonl # 10

내려받은 JSONL 은 저장된 스키마 그대로입니다 — record_id, content_hash, split, meta 와 각 필드가 함께 나옵니다. 업로드할 때 completion 으로 보냈다면 response 로 정규화되어 있습니다.

막혔을 때

증상원인과 대처
생성이 403워크스페이스 소속이 없거나 write 바인딩이 없습니다. 관리자에게 요청하세요
적재가 502권한이 엔진에 아직 반영되지 않았을 수 있습니다 — 2~3분 뒤 재시도, 그래도 실패하면 관리자 문의
적재가 400 ("modality")데이터셋 모달리티와 파일 종류가 다릅니다. image_text 는 현재 적재 경로가 없습니다
업로드는 성공인데 0건비디오를 zip 으로 올렸을 수 있습니다 — 개별 파일로 올리세요
중복 스킵이 많다같은 바이트는 한 번만 저장됩니다(정상). 라벨만 바꿔 다시 올려도 반영되지 않습니다
버전 생성이 422snapshot ID 가 비었거나 형식이 틀렸습니다. 업로드 출력의 snapshot: 값을 문자열로 넣으세요

이 문서의 검증 범위

2026-08-08 운영 환경에서 analyst 권한 계정으로 위 순서를 그대로 실행해 캡처했습니다. 확인한 것:

  • UI 로그인 → 4개 모달리티 데이터셋 생성
  • CLI 로 텍스트(JSONL) · 이미지(zip) · 비디오(mp4) 적재
  • UI 에서 행·갤러리 표시 확인
  • 버전 고정 → 다운로드 → 업로드분 10건과 대조(누락 0 · 예상밖 0)
  • 위장 파일(확장자만 mp4) 거부 확인

image_text 는 적재 경로가 없어 생성까지만 확인했습니다(#3258).