> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# データセットをアップロードする

> 手元にある JSONL ファイルを Management API でアップロードして、データセットを作成します。

トレーニング用のサンプルが project の外部にすでにある場合は、[推論プロキシ](/ja/model-distillation/proxy/overview)経由でトラフィックを記録する代わりに、JSONL ファイルとしてアップロードできます。Model Distillation はファイルを検証し、トレーニングと検証の分割を割り当ててデータセットを作成します。作成されたデータセットは、他のデータセットと同様に再ラベル付け、ファインチューニング、評価に使用できます。

アップロードは Management API からのみ実行できます。UI には作成されたデータセットが表示され、データセット設定には **Uploaded source** パネルも表示されますが、ファイルを選択してアップロードする機能はありません。

このページでは、アップロードの進行状況、ファイルの準備方法、分割アップロードの手順、および検証結果の見方について説明します。

<h2 id="prerequisites">
  前提条件
</h2>

開始する前に、以下を準備してください。

* Model Distillation へのアクセス権を持つチームの W\&B APIキー。サンプルでは、このキーを `WANDB_API_KEY` 環境変数から読み取って `Authorization` ヘッダーで渡し、entity を `Wandb-Entity` ヘッダーで指定します。
* そのチーム内の project。project のエイリアスはすべてのリクエストパスに含まれます。project の作成方法については、[クイックスタート](/ja/model-distillation/quickstart)を参照してください。
* [ファイルをアップロードする](#upload-the-file)で使用するタブに応じたツール。以下のいずれか 1 つのセットがあれば十分です。
  * `curl`、`jq`、`split`。
  * Python 3.9 以降と `requests` パッケージ。
  * Node.js 18 以降 (追加パッケージは不要) 。

<h2 id="how-an-upload-works">
  アップロードの仕組み
</h2>

アップロードとは、project 単位の*インポートセッション*です。1 つのセッションが扱う JSONL ファイルは 1 つだけで、このファイルはパートに分割してオブジェクトストレージに直接送信します。セッションは次の状態を遷移します。

| 状態 | 意味 |
| - | - |
| `uploading` | セッションがパートのアップロードを受け付けている状態です。 |
| `queued`, `validating`, `auditing`, `committing` | アップロードは完了しています。Model Distillation が行を解析し、分割と重複をチェックしてから、データセットを書き込みます。 |
| `ready` | データセットが作成済みです。その ID は `dataset_id` で確認できます。 |
| `failed` | 検証またはデータセットの作成に失敗しました。失敗の理由は `error` に示され、行単位の問題は `validation.errors` に一覧表示されます。 |
| `cancelled` | セッションが `ready` に達する前に削除されました。 |
| `expired` | セッションが完了しないまま、7 日間 `uploading` の状態が続きました。 |

作成から 7 日経過しても `uploading` のままのセッションは期限切れになります。期限切れのセッションに対するパートリクエストや完了リクエストは `410 Gone` を返します。また、1 時間ごとに実行されるジョブによってセッションは `expired` に移行し、パートは破棄されます。アップロードされたオブジェクトと未完了のマルチパートアップロードは、セッションが完了したかどうかにかかわらず、書き込みから 8 日後に削除されます。

entity とは、`Wandb-Entity` ヘッダーで指定されたチームまたは個人アカウントです。各 entity で同時に進行できるセッションは 2 つまでで、宣言されたファイルサイズの合計は最大 2 GiB です。セッションは、作成時から `ready`、`failed`、`cancelled`、`expired` のいずれかに達するまで、これら両方の制限の対象としてカウントされます。いずれかの制限を超えるリクエストは `429 Too Many Requests` を返します。キャパシティを空けるには、不要になったセッションをキャンセルするか、実行中のセッションが終了するまでお待ちください。

<h2 id="prepare-the-file">
  ファイルを準備する
</h2>

インポートセッションを作成する前に、ファイルが行形式に準拠し、このセクションで説明する制限の範囲内に収まっていることを確認してください。検証はアップロードが完了した後にのみ実行されます。また、失敗したセッションを再度開くことはできません。形式の問題を修正するには、新しいセッションを作成してファイルを再アップロードしてください。

ファイルは UTF-8 の JSONL 形式である必要があります。1 行につき 1 つの JSON オブジェクトを記述し、1 つのオブジェクト内でキーが重複しないようにしてください。

<h3 id="row-format">
  行の形式
</h3>

各行は OpenAI Chat Completions リクエストで、その最後のメッセージがトレーニングの目標とするアシスタントの応答です。Model Distillation は、それより前のメッセージと、指定されている場合は `tools`、`tool_choice`、`response_format` を入力として保存し、最後のアシスタント メッセージを出力として保存します。

```json theme={"system"}
{"messages":[{"role":"system","content":"Classify the ticket."},{"role":"user","content":"My invoice is wrong."},{"role":"assistant","content":"billing"}],"row_id":"ticket-1042"}
```

各行には 2 件以上のメッセージが必要で、最大 1,000 件まで含めることができます。`tools` には最大 128 個の関数ツールと 1 MiB までの JSON を指定できます。最後のメッセージがアシスタントのものでない行は、`missing_assistant_target` エラーで失敗します。

<h3 id="optional-fields">
  オプションフィールド
</h3>

各行には、次のオプションフィールドを含めることができます。

| フィールド | 用途 |
| - | - |
| `row_id` | 固定の識別子です (最大 512 文字)。ファイル内で一意である必要があります。指定しない場合は、行番号で行が識別されます。 |
| `group_id` | 関連する行を同じ分割にまとめます (最大 512 文字)。デフォルトは行のアイデンティティです。 |
| `split` | `train` または `val`。`split_policy.mode` が `preserve` の場合はすべての行で必須です。モードが `automatic` の場合は無視されます。 |
| `metadata` | 任意の JSON です (最大 64 KiB、ネストの深さは最大 10 レベル)。 |
| `provenance` | 行の出所を記録する任意の JSON です。`metadata` と同じ制限が適用されます。 |

行には、これ以外のトップレベルのフィールドを含めることはできません。

<h3 id="limits">
  制限
</h3>

ファイルとインポートセッションには、次の制限が適用されます。

| 制限 | 値 |
| - | - |
| ファイルサイズ | 1 GiB |
| ファイルあたりの行数 | 100,000 |
| 行サイズ | 10 MiB |
| JSON のネストの深さ | 64 階層 |
| パートサイズ | 32 MiB (サーバー側で固定) |
| entity あたりの進行中のセッション数 | 2 |
| entity あたりの進行中のセッションの `size_bytes` の合計 | 2 GiB |

<h2 id="upload-the-file">
  ファイルをアップロードする
</h2>

アップロードは、セッションの作成、ファイルの分割アップロード、アップロードの完了、データセットが準備完了になるまでのポーリングという段階を経て進みます。以下のタブでは、一連の流れを 1 つのスクリプトにまとめ、`curl`、Python、JavaScript で示しています。各段階は番号付きのコメントで示しており、それぞれの詳細は [スクリプトの仕組み](#how-the-script-works) で説明しています。

スクリプトでは、project のエイリアスに `ticket-classifier`、ファイル名に `tickets.jsonl` を使用しています。スクリプトを実行する前に、entity、エイリアス、ファイル名をご自身の値に置き換え、環境変数 `WANDB_API_KEY` を設定してください。また、アップロードごとに一意の `idempotency_key` を新たに指定してください。

<Tabs>
  <Tab title="curl">
    ```bash theme={"system"}
    #!/usr/bin/env bash
    # curl、jq、split が必要です。
    set -euo pipefail

    API="https://distillation.training.wandb.ai/v1/tasks/ticket-classifier"
    ENTITY="your-team"
    FILE="tickets.jsonl"
    auth=(--header "Authorization: Bearer $WANDB_API_KEY" --header "Wandb-Entity: $ENTITY")

    # 1. インポートセッションを作成します。
    size=$(wc -c < "$FILE" | tr -d ' ')
    curl --silent --fail --request POST --url "$API/dataset-imports" "${auth[@]}" \
      --header "Content-Type: application/json" \
      --data "$(jq -n --arg name "$FILE" --argjson size "$size" '{
        idempotency_key: "support-tickets-v1",
        name: "Support tickets (uploaded)",
        file: { name: $name, size_bytes: $size },
        split_policy: { mode: "automatic", val_fraction: 0.1 },
        duplicate_policy: { split_overlap: "drop_train" }
      }')" --output session.json
    import_id=$(jq -r '.id' session.json)
    part_size=$(jq -r '.file.part_size_bytes' session.json)
    part_count=$(jq -r '.file.part_count' session.json)

    # 2. 各パートの署名付きアップロード URL をリクエストします。
    curl --silent --fail --request POST --url "$API/dataset-imports/$import_id/parts" "${auth[@]}" \
      --header "Content-Type: application/json" \
      --data "$(jq -n --argjson count "$part_count" '{ part_numbers: [range(1; $count + 1)] }')" \
      --output urls.json

    # 3. パートをアップロードします。パート番号は 1 から始まります。署名付き URL には認either情報が含まれているため、別途認証は不要です。
    split -b "$part_size" -d -a 4 "$FILE" part-
    n=1
    for chunk in part-*; do
      url=$(jq -r --argjson n "$n" '.parts[] | select(.part_number == $n) | .url' urls.json)
      curl --silent --fail --request PUT --upload-file "$chunk" "$url"
      n=$((n + 1))
    done
    rm part-*

    # 4. オプション: セッションを読み取り、受信済みのパートを確認します。
    curl --silent --fail --url "$API/dataset-imports/$import_id" "${auth[@]}" | jq '.file | {uploaded_bytes, parts}'

    # 5. アップロードを完了します。これにより、検証とデータセットの作成がキューに登録されます。
    curl --silent --fail --request POST --url "$API/dataset-imports/$import_id/complete" "${auth[@]}" --output /dev/null

    # 6. セッションが準備完了または失敗の状態になるまでポーリングします。
    while true; do
      curl --silent --fail --url "$API/dataset-imports/$import_id" "${auth[@]}" --output status.json
      case "$(jq -r '.state' status.json)" in
        ready|failed) break ;;
      esac
      sleep 10
    done
    jq '{state, dataset_id, error}' status.json
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={"system"}
    # Python 3.9 以降と requests パッケージが必要です。
    import os
    import time

    import requests

    API = "https://distillation.training.wandb.ai/v1/tasks/ticket-classifier"
    HEADERS = {
        "Authorization": f"Bearer {os.environ['WANDB_API_KEY']}",
        "Wandb-Entity": "your-team",
    }
    FILE = "tickets.jsonl"

    # 1. インポートセッションを作成します。
    response = requests.post(
        f"{API}/dataset-imports",
        headers=HEADERS,
        json={
            "idempotency_key": "support-tickets-v1",
            "name": "Support tickets (uploaded)",
            "file": {"name": FILE, "size_bytes": os.path.getsize(FILE)},
            "split_policy": {"mode": "automatic", "val_fraction": 0.1},
            "duplicate_policy": {"split_overlap": "drop_train"},
        },
    )
    response.raise_for_status()
    session = response.json()
    import_id = session["id"]
    part_size = session["file"]["part_size_bytes"]
    part_count = session["file"]["part_count"]

    # 2. 各パートの署名付きアップロード URL をリクエストします。
    response = requests.post(
        f"{API}/dataset-imports/{import_id}/parts",
        headers=HEADERS,
        json={"part_numbers": list(range(1, part_count + 1))},
    )
    response.raise_for_status()
    url_by_part = {part["part_number"]: part["url"] for part in response.json()["parts"]}

    # 3. パートをアップロードします。パート番号は 1 から始まります。署名付き URL 自体に認可情報が含まれているため、認証ヘッダーは不要です。
    with open(FILE, "rb") as handle:
        for part_number in range(1, part_count + 1):
            chunk = handle.read(part_size)
            requests.put(url_by_part[part_number], data=chunk).raise_for_status()

    # 4. オプション: セッションを取得して、受信済みのパートを確認します。
    progress = requests.get(f"{API}/dataset-imports/{import_id}", headers=HEADERS).json()
    uploaded = {part["part_number"] for part in progress["file"]["parts"]}
    missing = [n for n in range(1, part_count + 1) if n not in uploaded]

    # 5. アップロードを完了します。これにより、検証とデータセットの作成がキューに登録されます。
    requests.post(f"{API}/dataset-imports/{import_id}/complete", headers=HEADERS).raise_for_status()

    # 6. セッションが準備完了または失敗の状態になるまでポーリングします。
    while True:
        status = requests.get(f"{API}/dataset-imports/{import_id}", headers=HEADERS).json()
        if status["state"] in ("ready", "failed"):
            break
        time.sleep(10)

    print(status["state"], status["dataset_id"], status["error"])
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={"system"}
    // Node.js 18 以降が必要です。追加のパッケージのインストールは不要です。
    import { open, stat } from "node:fs/promises";

    const API = "https://distillation.training.wandb.ai/v1/tasks/ticket-classifier";
    const HEADERS = {
      Authorization: `Bearer ${process.env.WANDB_API_KEY}`,
      "Wandb-Entity": "your-team",
    };
    const FILE = "tickets.jsonl";

    async function call(path, init = {}) {
      const response = await fetch(`${API}${path}`, { ...init, headers: { ...HEADERS, ...init.headers } });
      if (!response.ok) throw new Error(`${init.method ?? "GET"} ${path} failed: ${await response.text()}`);
      return response.status === 204 ? null : response.json();
    }

    // 1. インポートセッションを作成します。
    const { size } = await stat(FILE);
    const session = await call("/dataset-imports", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        idempotency_key: "support-tickets-v1",
        name: "Support tickets (uploaded)",
        file: { name: FILE, size_bytes: size },
        split_policy: { mode: "automatic", val_fraction: 0.1 },
        duplicate_policy: { split_overlap: "drop_train" },
      }),
    });
    const importId = session.id;
    const partSize = session.file.part_size_bytes;
    const partCount = session.file.part_count;

    // 2. 各パートの署名付きアップロード URL をリクエストします。
    const urls = await call(`/dataset-imports/${importId}/parts`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ part_numbers: Array.from({ length: partCount }, (_, i) => i + 1) }),
    });
    const urlByPart = new Map(urls.parts.map((part) => [part.part_number, part.url]));

    // 3. パートをアップロードします。パート番号は 1 から始まります。署名付き URL 自体に認可情報が含まれています。
    const handle = await open(FILE, "r");
    try {
      for (let partNumber = 1; partNumber <= partCount; partNumber++) {
        const offset = (partNumber - 1) * partSize;
        const chunk = Buffer.alloc(Math.min(partSize, size - offset));
        await handle.read(chunk, 0, chunk.length, offset);
        const put = await fetch(urlByPart.get(partNumber), { method: "PUT", body: chunk });
        if (!put.ok) throw new Error(`Part ${partNumber} failed with ${put.status}`);
      }
    } finally {
      await handle.close();
    }

    // 4. オプション: セッションを取得し、どのパートが受信済みかを確認します。
    const progress = await call(`/dataset-imports/${importId}`);
    const uploaded = new Set(progress.file.parts.map((part) => part.part_number));
    const missing = Array.from({ length: partCount }, (_, i) => i + 1).filter((n) => !uploaded.has(n));

    // 5. アップロードを完了します。これにより、検証とデータセットの作成がキューに追加されます。
    await call(`/dataset-imports/${importId}/complete`, { method: "POST" });

    // 6. セッションが準備完了または失敗の状態になるまでポーリングします。
    let status;
    while (true) {
      status = await call(`/dataset-imports/${importId}`);
      if (status.state === "ready" || status.state === "failed") break;
      await new Promise((resolve) => setTimeout(resolve, 10_000));
    }
    console.log(status.state, status.dataset_id, status.error);
    ```
  </Tab>
</Tabs>

<h3 id="how-the-script-works">
  スクリプトの仕組み
</h3>

各スクリプト内の番号付きコメントは、以下の各段階に対応しています。

<Steps>
  <Step title="インポートセッションを作成する">
    スクリプトは、ファイル名と正確なバイトサイズ、分割ポリシー、および任意で重複ポリシーを送信します。各ポリシーの動作については、[分割と重複](#splits-and-duplicates)を参照してください。リクエストには一意の `idempotency_key` も必要です。これにより、リクエストを再試行しても 2 つ目のセッションは作成されず、既存のセッションが返されます。

    応答は `201 Created` で、セッションが返されます。スクリプトはその中の `id`、`file.part_size_bytes`、`file.part_count` を保持します。以下の抜粋にこれらのフィールドを示します。

    ```json theme={"system"}
    {
      "id": "3f9c2d1e-7b4a-4c58-9e21-0d6f8a1b2c3d",
      "state": "uploading",
      "dataset_id": null,
      "total_bytes": 73400320,
      "expires_at": "2026-09-24T18:02:11.000Z",
      "file": {
        "name": "tickets.jsonl",
        "size_bytes": 73400320,
        "part_size_bytes": 33554432,
        "part_count": 3,
        "state": "pending",
        "uploaded_bytes": 0,
        "parts": []
      }
    }
    ```
  </Step>

  <Step title="アップロード URL をリクエストする">
    スクリプトは、1 から `file.part_count` までのすべてのパート番号について署名付き URL をリクエストします。応答には、各 `part_number` とその `url`、および `expires_in_seconds` が含まれます。各 URL の有効期間は 15 分です。使用前に URL の有効期限が切れた場合は、再度リクエストしてください。
  </Step>

  <Step title="パートをアップロードする">
    スクリプトはファイルを `file.part_size_bytes` 単位のチャンクで読み込み、各チャンクを対応するパート番号の URL に `PUT` リクエストで送信します。パート番号は 1 から始まるため、最初のチャンクがパート 1 になります。最後のパート以外はすべて正確に `file.part_size_bytes` の長さである必要があり、最後のパートには残りのデータが入ります。パートは任意の順序で、並列に送信できます。

    署名付き URL 自体に認可情報が含まれているため、スクリプトはこれらのリクエストに `Authorization` ヘッダーや `Wandb-Entity` ヘッダーを付与しません。
  </Step>

  <Step title="オプション: 到着したパートを確認する">
    中断された転送を再開するには、セッションを読み取ります。`file.parts` にはアップロード済みの各パートとそのサイズが一覧表示され、`file.uploaded_bytes` にはその合計が示されます。不足しているパートについては新しい URL をリクエストし、再送信してください。Python と JavaScript のスクリプトは不足しているパート番号を算出し、`curl` スクリプトはアップロード済みパートの一覧を出力します。中断なく 1 回で実行すれば不足パートは発生しないため、いずれのスクリプトも不足パートの再送信は行いません。
  </Step>

  <Step title="アップロードを完了する">
    すべてのパートが揃うと、スクリプトはアップロードを完了します。Model Distillation は、パートが宣言されたサイズと一致するかを検証し、ダイジェストを計算したうえで、検証とデータセット作成をキューに登録します。

    応答は `202 Accepted` です。パートが不足している場合は、タイプ `upload_incomplete` の `409 Conflict` が返されます。パートのサイズが正しくない場合、タイプは `upload_manifest_mismatch` になります。いずれの場合もセッションは `uploading` のままなので、パートを修正してから再度アップロードを完了できます。すでに完了したアップロードに対して再度完了を実行した場合、リクエストはエラーにならず、現在のセッションを返します。
  </Step>

  <Step title="データセットの準備が完了するまでポーリングする">
    スクリプトは、`state` が `ready` または `failed` になるまで 10 秒ごとにセッションを読み取ります。検証の実行中は、`validation.validated_rows` に解析済みの行数が示され、`counters` には `staged_rows`、`rejected_rows`、`rows_by_split` が含まれます。

    `state` が `ready` になると、`dataset_id` で新しいデータセットを識別できます。この ID を再ラベル付け、ファインチューニング、評価で使用するか、UI でデータセットを開いてください。`state` が `failed` の場合は、[検証結果を確認する](#read-validation-results)を参照してください。
  </Step>
</Steps>

<h2 id="splits-and-duplicates">
  分割と重複
</h2>

`split_policy` は、行をトレーニングと検証にどのように振り分けるかを決定します。

* **`preserve`** は、各行の `split` 値をそのまま保持します。`split` のない行は、`missing_split` として検証に失敗します。
* **`automatic`** は、行に含まれる `split` 値をすべて無視します。各行の `group_id` (`group_id` がない場合は行のアイデンティティ) をハッシュ化し、`val_fraction` で指定された割合の行を検証分割に割り当てます。デフォルトの割合は 0.2 です。同じ `group_id` を持つ行は、常に同じ分割に割り当てられます。

`duplicate_policy.split_overlap` は、割り当て後に同一の入力が両方の分割に含まれる場合の動作を決定します。

* **`reject`** (デフォルト) では、重複する行ごとに検証エラーが記録され、インポートは失敗します。
* **`drop_train`** は、トレーニング側のコピーを削除し、検証側のコピーを残します。

ファイル内に複数回出現する `row_id` は、いずれのポリシーでも `duplicate_row_id` として検証に失敗します。

<h2 id="read-validation-results">
  検証結果を確認する
</h2>

`failed` 状態のセッションでは、`error` に短い概要が入り、`validation` に詳細が格納されます。

* `error_count` は、検出された問題の総数です。
* `errors` には、最大 100 件の問題が行順に格納されます。各問題には `physical_line`、`code`、`message` が含まれます。
* `errors_truncated` は、リストに含まれていない問題が他にもある場合に `true` になります。

主なコードには、`invalid_json`、`invalid_utf8`、`duplicate_json_key`、`row_too_large`、`missing_assistant_target`、`tools_too_large`、`missing_split`、`duplicate_row_id` があります。ファイルを修正してから、新しいセッションを作成してください。失敗したセッションを再度開くことはできません。

<h2 id="cancel-an-upload">
  アップロードをキャンセルする
</h2>

セッションを破棄するには、そのセッションを削除します。キャンセルは `ready` 以外のすべての状態で実行できるため、検証中のセッションや失敗したセッションも破棄できます。応答は `204 No Content` となり、状態は `cancelled` に変わります。アップロード済みのパートは破棄され、途中まで作成されたデータセットも削除されます。キャンセル済みのセッションに同じリクエストを再度送信した場合も、`204 No Content` が返されます。

```bash theme={"system"}
curl --request DELETE \
  --url "https://distillation.training.wandb.ai/v1/tasks/ticket-classifier/dataset-imports/$IMPORT_ID" \
  --header "Authorization: Bearer $WANDB_API_KEY" \
  --header "Wandb-Entity: your-team"
```

すでに `ready` 状態に達したセッションに対してキャンセルを行うと、タイプ `dataset_import_ready` の `409 Conflict` が返されます。そのセッションで作成されたデータセットを削除するには、セッションではなくデータセット自体を削除してください。詳しくは、[データセットを削除する](/ja/model-distillation/studio/datasets#delete-a-dataset)を参照してください。

<h2 id="errors">
  エラー
</h2>

インポートセッションのリクエストでは、次のエラーが返される場合があります。

| ステータス | タイプ | 原因 |
| - | - | - |
| `403 Forbidden` | `dataset_uploads_disabled` | この entity ではアップロードが有効になっていません。 |
| `409 Conflict` | `idempotency_conflict` | `idempotency_key` が、異なるリクエストボディですでに使用されています。 |
| `409 Conflict` | `dataset_import_not_uploading` | セッションが `uploading` 状態ではなくなったため、新しいパートを受け入れられません。 |
| `409 Conflict` | `upload_incomplete` | すべてのパートが揃う前にアップロードを完了しようとしました。 |
| `409 Conflict` | `upload_manifest_mismatch` | アップロードされたパート、または結合後のファイルが、宣言されたサイズと一致しません。 |
| `409 Conflict` | `dataset_import_ready` | データセットの作成が完了したセッションをキャンセルしようとしました。 |
| `409 Conflict` | `dataset_import_state_changed` | リクエストの処理中にセッションの状態が変化しました。セッションを再度取得してから再試行してください。 |
| `410 Gone` | `dataset_import_expired` | セッションの作成から 7 日以上経過しています。新しいセッションを作成してください。 |
| `422 Unprocessable Entity` | `validation_error` | パート番号が `file.part_count` を超えています。 |
| `429 Too Many Requests` | `dataset_import_concurrency_limit` | この entity ではすでに 2 つのセッションが進行中です。 |
| `429 Too Many Requests` | `dataset_import_byte_quota` | 新しいファイルを追加すると、進行中のセッションで宣言されたサイズの合計が、この entity の上限である 2 GiB を超えます。 |
| `502 Bad Gateway` | `object_storage_error` | アップロード用ストレージがリクエストを拒否しました。しばらくしてから再試行してください。 |
| `503 Service Unavailable` | `uploads_unavailable`, `temporal_unavailable` | アップロード用ストレージまたは検証キューに接続できません。しばらくしてから再試行してください。 |

リクエストと応答のスキーマについては、Management API リファレンスの次のページを参照してください。

* [データセットインポートセッションを作成する](/ja/model-distillation/reference/management/datasets/create-a-dataset-import-session)
* [ファイルパートのアップロード URL を作成する](/ja/model-distillation/reference/management/datasets/create-upload-urls-for-file-parts)
* [データセットインポートセッションを取得する](/ja/model-distillation/reference/management/datasets/get-a-dataset-import-session)
* [データセットインポートを完了して検証する](/ja/model-distillation/reference/management/datasets/complete-and-validate-a-dataset-import)
* [データセットインポートをキャンセルする](/ja/model-distillation/reference/management/datasets/cancel-a-dataset-import)

<h2 id="next-steps">
  次のステップ
</h2>

<CardGroup cols={2}>
  <Card title="再ラベル付け" icon="pen-to-square" href="/ja/model-distillation/studio/relabeling">
    元の行は変更せずに、アップロードしたデータセット内のアシスタントの応答を、より高性能なモデルで書き直します。
  </Card>

  <Card title="ファインチューニング" icon="graduation-cap" href="/ja/model-distillation/studio/fine-tuning">
    元の出力またはリラベルした出力セットを使用して、サポートされるベースモデルをアップロードしたデータセットでトレーニングします。
  </Card>
</CardGroup>


## Related topics

- [Evaluation Playground を使用してモデル性能を比較する](/ja/products/wandb/weave/guides/tools/evaluation_playground.md)
