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

# Launch ジョブを作成する

> wandb launch コマンドを使用して、Git リポジトリ、コードアーティファクト、または Docker image から W&B Launch ジョブを作成します。

<Card title="Colab で試す" href="https://colab.research.google.com/drive/1wX0OSVxZJDHRsZaOaOEDx-lLUrO1hHgP" icon="python" />

このページでは、必要なときに W\&B runs を再現できるように、W\&B Launch ジョブを作成する方法を説明します。Launch ジョブは、W\&B Runs を再現するための設計図です。ジョブは、ワークロードの実行に必要なソースコード、依存関係、入力を含む W\&B Artifacts です。

このページは、Git リポジトリ、ローカルのコード ディレクトリ、または事前構築済みの Docker image からワークロードをパッケージ化し、後で異なるパラメーターや異なるインフラストラクチャーで再実行したい場合に使用します。

`wandb launch` コマンドを使用して、ジョブを作成および実行します。

<Note>
  実行のために送信せずにジョブを作成するには、`wandb job create` コマンドを使用します。詳細については、[コマンド リファレンス ドキュメント](/ja/models/ref/cli/wandb-job/wandb-job-create)を参照してください。
</Note>

<div id="git-jobs">
  ## Git ジョブ
</div>

ソースコードがリモート Git リポジトリにあり、特定のコミット、ブランチ、またはタグで Launch にクローンさせたい場合は、Git ベースのジョブを使用します。W\&B Launch は、リモート Git リポジトリ内のコミット、ブランチ、またはタグから、コードやそのほかの追跡対象アセットをクローンします。コードを含む URI は `--uri` または `-u` フラグで指定し、必要に応じて `--build-context` フラグでサブディレクトリを指定できます。

次のコマンドを使用して、Git リポジトリから hello world ジョブを実行します。

```bash theme={null}
wandb launch --uri "https://github.com/wandb/launch-jobs.git" --build-context jobs/hello_world --dockerfile Dockerfile.wandb --project "hello-world" --job-name "hello-world" --entry-point "python job.py"
```

このコマンドは次の処理を実行します。

1. [W\&B Launch jobs repository](https://github.com/wandb/launch-jobs) を一時ディレクトリーにクローンします。
2. **hello** project に **hello-world-git** という名前のジョブを作成します。このジョブは、リポジトリーのデフォルトブランチの先頭のコミットに関連付けられます。
3. `jobs/hello_world` ディレクトリーと `Dockerfile.wandb` からコンテナーイメージをビルドします。
4. コンテナーを起動し、`python job.py` を実行します。

コマンドの完了後、`hello-world` project には、ほかのユーザーやオートメーションが `wandb launch` で再実行できる、再利用可能な Git ベースのジョブが作成されます。

特定のブランチまたはコミットハッシュからジョブをビルドするには、`-g` または `--git-hash` 引数を追加します。引数の一覧を確認するには、`wandb launch --help` を実行します。

<div id="remote-url-format">
  ### リモート URL の形式
</div>

Launch ジョブに関連付けられた Git リモートには、HTTPS URL または SSH URL を使用できます。URL のタイプによって、ジョブのソースコードの取得に使用するプロトコルが決まります。

| リモート URL のタイプ | URL 形式                                           | アクセスと認証の要件                  |
| ------------- | ------------------------------------------------ | --------------------------- |
| HTTPS         | `https://github.com/organization/repository.git` | Git リモートの認証に使用するユーザー名とパスワード |
| SSH           | `git@github.com:organization/repository.git`     | Git リモートの認証に使用する SSH キー     |

なお、正確な URL 形式はホスティングプロバイダーによって異なります。`wandb launch --uri` で作成されたジョブでは、指定した `--uri` の転送プロトコルが使用されます。

<div id="code-artifact-jobs">
  ## コード Artifact ジョブ
</div>

ソースがリモート Git repository ではなくローカルディレクトリにある場合は、コード Artifact ジョブを使用します。ジョブは、W\&B Artifact に保存された任意のソースコードから作成できます。ローカルディレクトリを `--uri` または `-u` 引数で指定して、新しいコード Artifact とジョブを作成します。

まず、空のディレクトリを作成し、`main.py` という名前の Python スクリプトに次の内容を追加します。

```python theme={null}
import wandb

with wandb.init() as run:
    run.log({"metric": 0.5})
```

次の内容を含む `requirements.txt` ファイルを追加します。

```text theme={null}
wandb>=0.17.1
```

次のコマンドを実行して、ディレクトリをコードアーティファクトとしてログし、ジョブを起動します:

```bash theme={null}
wandb launch --uri . --job-name hello-world-code --project launch-quickstart --entry-point "python main.py"
```

前述のコマンドは、次の処理を行います。

1. 現在のディレクトリを、`hello-world-code` という名前のコードアーティファクトとしてログします。
2. `launch-quickstart` project に、`hello-world-code` という名前のジョブを作成します。
3. 現在のディレクトリと Launch のデフォルトの Dockerfile からコンテナーイメージをビルドします。デフォルトの Dockerfile では、`requirements.txt` ファイルがインストールされ、エントリポイントが `python main.py` に設定されます。

コマンドの実行が完了すると、ローカルコードは W\&B コードアーティファクトとして取得され、`launch-quickstart` project 内の再利用可能なジョブに関連付けられます。

<div id="image-jobs">
  ## Image jobs
</div>

また、事前に作成した Docker image を基にジョブを build することもできます。このアプローチは、ML コード向けの確立された build システムがすでにある場合や、ジョブのコードや requirements を調整する予定はないものの、ハイパーパラメーターや異なるインフラストラクチャー規模で experiment したい場合に便利です。

Launch は Docker Registry から image を pull し、指定された entry point、指定がない場合はデフォルトの entry point で run します。`--docker-image` オプションに完全な image tag を渡すと、Docker image からジョブを作成して run できます。

次のコマンドで、事前に作成した image からジョブを run します。

```bash theme={null}
wandb launch --docker-image "wandb/job_hello_world:main" --project "hello-world"           
```

<div id="automatic-job-creation">
  ## ジョブの自動作成
</div>

`wandb launch` で明示的に作成するジョブに加えて、W\&B は、トラッキングされたコードの実行に伴う副次的な効果として、ジョブを作成できます。W\&B は、Launch で作成されていない run であっても、ソースコードがトラッキングされている任意の run に対して、自動的にジョブを作成し、トラッキングします。run は、次の 3 つの条件のいずれかを満たす場合、ソースコードがトラッキングされていると見なされます。

* その run に関連付けられた Git リモートとコミットハッシュがある。
* その run がコード artifact をログした。[`Run.log_code`](/ja/models/ref/python/experiments/run#log_code) を参照してください。
* その run が、`WANDB_DOCKER` 環境変数にイメージタグが設定された Docker コンテナー内で実行された。

W\&B が W\&B run から Launch ジョブを自動的に作成する場合、W\&B はローカルの Git repository から Git リモート URL を推定します。

<div id="launch-job-names">
  ### Launch ジョブ名
</div>

デフォルトでは、W\&B がジョブ名を自動的に生成します。この名前は、ジョブの作成方法 (GitHub、Code artifact、または Docker image) によって決まります。必要に応じて、環境変数または W\&B Python SDK を使用して Launch ジョブ名を定義することもできます。

次の表は、ジョブのソースに基づいてデフォルトで使用されるジョブの命名規則を示しています。

| ソース           | 命名規則                                    |
| ------------- | --------------------------------------- |
| GitHub        | `job-[GIT-REMOTE-URL]-[PATH-TO-SCRIPT]` |
| Code artifact | `job-[CODE-ARTIFACT-NAME]`              |
| Docker image  | `job-[IMAGE-NAME]`                      |

W\&B 環境変数または W\&B Python SDK を使用してジョブ名を設定する。

<Tabs>
  <Tab title="環境変数">
    `WANDB_JOB_NAME` 環境変数を、希望するジョブ名に設定します。例:

    ```bash theme={null}
    WANDB_JOB_NAME=awesome-job-name
    ```
  </Tab>

  <Tab title="W&B Python SDK">
    `wandb.Settings` でジョブ名を定義します。次に、`wandb.init()` で W\&B を初期化するときにこの object を渡します。例:

    ```python theme={null}
    settings = wandb.Settings(job_name="my-job-name")
    wandb.init(settings=settings)
    ```
  </Tab>
</Tabs>

<Note>
  Docker image ジョブでは、W\&B が version alias をジョブの alias として自動的に追加します。
</Note>

<div id="containerization">
  ## コンテナー化
</div>

ジョブはコンテナー内で実行されます。Image ジョブは事前にビルドされた Docker image を使用します。一方、Git ジョブとコード artifact ジョブでは、コンテナーのビルド ステップが必要です。

ジョブのコンテナー化は、`wandb launch` の引数と、ジョブのソースコード内のファイルを使ってカスタマイズできます。以下のセクションでは、ビルド コンテキストの制御、カスタム Dockerfile の指定、Python の依存関係の管理の方法について説明します。

<div id="build-context">
  ### ビルドコンテキスト
</div>

ビルドコンテキストとは、コンテナーイメージをビルドするために Docker デーモンに送信されるファイルとディレクトリーのツリーを指します。デフォルトでは、Launch はジョブのソースコードのルートをビルドコンテキストとして使用します。ビルドコンテキストとしてサブディレクトリーを指定するには、ジョブを作成して起動する際に `wandb launch` の `--build-context` 引数を使用します。

<Note>
  `--build-context` 引数は、複数の Projects を含むモノレポを参照する Git ジョブを扱う場合に便利です。ビルドコンテキストとしてサブディレクトリーを指定すると、モノレポ内の特定の project 向けのコンテナーイメージをビルドできます。

  公式の W\&B Launch jobs リポジトリーで `--build-context` 引数をどのように使用するかについては、[Git jobs](#git-jobs)を参照してください。
</Note>

<div id="dockerfile">
  ### Dockerfile
</div>

Dockerfile は、Docker イメージをビルドするための手順が記述されたテキストファイルです。デフォルトでは、Launch は `requirements.txt` ファイルをインストールするデフォルトの Dockerfile を使用します。カスタム Dockerfile を使用するには、`wandb launch` の `--dockerfile` 引数でそのファイルへのパスを指定します。

Dockerfile のパスは、ビルドコンテキストからの相対パスで指定してください。たとえば、ビルドコンテキストが `jobs/hello_world` で、Dockerfile が `jobs/hello_world` ディレクトリ内にある場合は、`--dockerfile` 引数を `Dockerfile.wandb` に設定します。公式の W\&B Launch ジョブリポジトリで `--dockerfile` 引数をどのように使用するかの例については、[Git ジョブ](#git-jobs)を参照してください。

<div id="requirements-file">
  ### Requirements file
</div>

カスタム Dockerfile が指定されていない場合、Launch はビルドコンテキスト内で、インストール対象の Python 依存関係を探します。ビルドコンテキストのルートに `requirements.txt` ファイルが見つかった場合、Launch はそのファイルに記載された依存関係をインストールします。見つからない場合は、`pyproject.toml` ファイルがあれば、Launch は `project.dependencies` セクションから依存関係をインストールします。
