Taskとコードバージョン
![]()
Taskは「どのコードを、どのモデル・データで、どこで動かすか」を保存した実行の設定です。Experimentの下に作り、Taskから通常実行とテスト実行を起動します。実行するコードはコードバージョンとして固定するため、コードを編集した後も、過去のJobで実際に動いた内容を確認できます。
こんなときに向いています
- 同じ学習を、パラメータだけ変えて何度も起動したい
- 本番の学習の前に、短いテストコマンドで動作を確かめたい
- Gitのリポジトリを編集して試したいが、元のリポジトリへはpushしたくない
- 学習が成功したら、出力した重みを自動でモデルのバージョンとして登録したい
全体の流れ
- 実行先のコンピュータを用意します。全体設定の「コンピュータ」で足すか、自分が使えるものを選びます。手順はコンピュータと公開範囲とSSH・Localのコンピュータを参照してください。
- Codeでコードを登録し、バージョンを作ります。
- TasksでTaskを作り、Experiment、コードバージョン、コンピュータを選んで保存します。
- [テスト実行]で動作を確かめてから、[通常実行]で起動します。
- 起動したRunで、メトリクス、ログ、終了状態、Artifactsを確認します。
Jobはworkerが実行します。対応するworkerが起動していないと、Jobは待機中のままです。workerの導入はworkerの導入と常駐を、始まらない理由の確かめ方はJobsの画面を参照してください。
コードバージョンを登録する
![]()
Codeで[コードを登録]を押してコードの名前を作り、[バージョンを作成]でバージョンを登録します。バージョンは保存した後に変更できません。編集して保存すると、新しいバージョンになります。
| 項目 | 内容 |
|---|---|
| バージョン | バージョン名です。例:v1 |
| Runtime | Python、Docker、Singularity、Apptainerのどれか |
| ソース形式 | Git、Inline(ファイルを直接保存)、Artifact(保存済みのZIP・TAR)、コンテナ内のコード |
| 実行コマンド(引数のJSON配列) | 通常実行のコマンドです。例:["python", "train.py"] |
| テストコマンド(引数のJSON配列・任意) | テスト実行のコマンドです。例:["python", "train.py", "--steps", "2"] |
| 依存パッケージ(1行に1件) | Pythonのときに、Jobごとのvenvへ入れるパッケージです。例:numpy>=1.26 |
| 環境変数(JSON) | 実行コードに渡す環境変数です。認証情報は書かないでください |
| 対応モデル系列(1行に1件) | このコードで動かせるモデル系列です。例:linear |
| 対応する実行種別 | 学習、ファインチューニング、推論、評価、データ処理から、当てはまるものすべてに印を付けます |
コマンドはシェルを通さず、JSON配列の要素をそのまま引数として渡します。100引数まで、1引数4000文字までです。
保存したバージョンは、Codeでバージョンを選ぶと中身を読めます(viewerも読めます)。[ファイル]にファイルの一覧と、選んだファイルの中身(Artifactのプレビューと同じく、形式に合わせて色付け)が出ます。Gitのバージョンでは、リポジトリとCommit、その上で変更・削除したファイルを表示します。[このコードバージョンの使われ方]には、[対応モデル系列]が合うモデルと、このバージョンを選んでいるTask・自動実行ルールが出ます。
サンプルから始める
[サンプル]で選んで[サンプルを追加]を押すと、ファイルと通常・テストのコマンドを読み込めます。
- スモークテスト(標準ライブラリ)
- MMT SDKのメトリクス
- MLflow 3のメトリクス
- CPU inference
- CPU training
CPU trainingは、重みをRunのArtifactmodel/weights.jsonへ保存するだけで、モデルの登録はしません。登録は、後で説明するTaskの出力モデル設定で行います。
リポジトリを指定する
[ソース形式]でGitを選び、[Git URL]と[Commit]を入力します。Commitは40桁または64桁の完全なhashで指定します。ブランチ名やタグは指定できません。Git URLは、認証情報を含まないHTTPSまたはSSHのURLにします。
[Gitのファイルを読み込む]を押すと、固定したcommitのファイルをエディタへ読み込みます。編集して保存すると、固定したcommitに変更したファイルと削除したパスを重ねたバージョンになります。元のリポジトリへはpushしません。バイナリや大きいファイルなど読み込まれなかったファイルは[編集対象外のパス]に表示され、実行時に元のcommitから取得します。
学習コードと推論コードが同じリポジトリにある場合も、実行コマンドを変えたコードバージョンをそれぞれ登録できます。推論コードだけ別のリポジトリにする場合は、[リポジトリの選択]で[別のリポジトリ]を選びます。
単体のコードを保存する
[リポジトリの選択]で[Standalone(ファイルを保存)]を選ぶと、ファイルをアプリに直接保存します。[ファイルのパス]にsrc/main.pyのような相対パスを入力して[ファイルを追加]を押し、エディタで内容を書きます。
エディタはMonaco Editorです。保存していない変更があるままダイアログを閉じようとすると、破棄してよいかを確認します。
コンテナで動かす
Runtimeでコンテナを選ぶと、依存関係をイメージに含めた環境でコードを動かせます。
| Runtime | 指定するもの |
|---|---|
| Docker | [Docker image(digest固定)]。例:registry.example.com/team/infer@sha256:<64桁のdigest>。タグだけの指定(image:latest)は使えません |
| Singularity、Apptainer | [SIF Artifact]。保存済みのSIFファイルを選ぶと、SHA256が自動で入ります |
- コードがイメージの中にある場合は、[ソース形式]で[コンテナ内のコード]を選びます。
- Git・Inline・Artifactのソースを追加すると、コンテナ内の
/mmt/sourceに読み取り専用で渡します。 - [コンテナ内の作業ディレクトリ(任意)]は絶対パスで指定します。例:
/app - コンテナでは[依存パッケージ]を使いません。必要なものはイメージに入れてください。
コンテナを動かすコンピュータには、対応するRuntimeを登録しておきます(SSH・Localのコンピュータ)。コンテナの中で読み書きするパスと環境変数は、workerの導入と常駐にまとめています。
Taskを作る
- Tasksで[Taskを作成]を押します。
- 次の項目を入力して[保存]を押します。
| 項目 | 内容 |
|---|---|
| 名前 | Taskの名前です。例:音声合成 学習 |
| Experiments | Runを記録するExperiment |
| 実行種別 | 学習、ファインチューニング、推論、評価、データ処理 |
| モデルバージョン | 入力に使うモデルバージョン(fine-tuningの元、推論するバージョンなど)。任意 |
| コードバージョン | 実行種別とモデル系列に対応するコードバージョンだけを選べます |
| 入力データセットバージョン | 実行前にworkerが取得して渡すデータセットバージョン。任意 |
| コンピュータ | 自分が使えて、コードバージョンのRuntimeに対応するコンピュータだけを選べます。Privateのコンピュータは所有者と、所有者が作ったService Accountだけが使えます。このTaskでSweepを作るときも、同じ条件のコンピュータだけを選べます(Sweep) |
| GPU ID | コンピュータに登録したGPUから選びます。選ばなければCPUだけで実行します |
| パラメータ、タグ | JSONで指定します。例:{"epochs": 8} |
- 一覧に追加されたTaskを選び、右側に保存した内容が表示されることを確かめます。
Taskを保存するたびに[Taskの改訂番号]が1つ増えます。別の画面で同じTaskが更新されていた場合は保存を拒否するので、最新の内容を確かめてから保存し直してください。
通常実行とテスト実行
Taskの詳細で[通常実行]または[テスト実行]を押すと、確認のダイアログが開きます。パラメータを変えたいときは、[パラメータの上書き(JSON)]に変える値だけを入力します。
| 使うコマンド | モデルの登録 | |
|---|---|---|
| 通常実行 | コードバージョンの実行コマンド | 出力モデル設定があれば、成功時に登録 |
| テスト実行 | コードバージョンのテストコマンド | 登録しない |
テスト実行には、コードバージョンにテストコマンドを保存しておく必要があります。
起動すると、そのときのTaskの改訂番号、コードバージョン、ソース、Runtime、コマンド、依存関係、環境設定をRunの[実行snapshot]に保存します。起動した後でTaskやコードを編集しても、そのRunの実行内容は変わりません。
workerは実行前のソースをZIPとmanifestにまとめ、RunのArtifactsへ保存します。失敗したテスト実行でも保存します。manifestでは、Git commitと各ファイルのSHA-256を確認できます。
Taskの[実行履歴]には最新50件を表示します。[古い実行]で続きを、[最新の実行]で先頭を表示します。
失敗したJobをもう一度動かすときは、Jobsの[新しいRunで再実行]を使い、確認のダイアログで[再実行する]を押します。前のコードバージョン、実行モード、Taskの改訂番号、パラメータを引き継いだ新しいRunになり、元のRunはそのまま残ります。最大試行回数に達したJobも再実行できます。再実行できるのは、Jobの作成者とProjectのAdminです(Jobsの画面)。編集したコードで試すときは、Taskのコードバージョンを変えてから新しく起動してください。
学習が成功したらモデルを登録する
学習とファインチューニングのTaskでは、成功したRunの重みをモデルのバージョンとして登録できます。学習コードに登録の処理を書く必要はありません。
- [Taskを編集]を開き、[出力モデル]の[成功時にモデルバージョンを登録]を選びます。
- [登録先]で[既存のモデル]か[新しいモデルを作成]を選びます。
- 既存のモデル: [登録先のモデル]を選びます。
- 新しいモデル: [モデル名]と[モデル系列]を入力します。系列は、Taskのコードバージョンが対応する系列から選びます。同じ名前のモデルがあれば、そのモデルを使います。
- [Artifactのパス]に、学習コードが保存した重みのファイルのパスを入力します。例:
model/weights.json。ファイルのパスと完全に一致させます。 - 必要なら[登録するバージョンの既定コードバージョン]を選び、[保存]を押します。
- [通常実行]を押すと、確認のダイアログに登録先のモデルが表示されます。
学習コードがSDKを使わずMMT_OUTPUTS_DIRへファイルを書く場合、ArtifactのパスはRunの中でcontainer/から始まります。例:MMT_OUTPUTS_DIR/model/weights.binならcontainer/model/weights.binです。
バージョン名は整数で自動採番します。Python SDKやAPIでTaskを作る場合は、バージョン名のテンプレート({runId}、{runName}、{taskRevision}を使えます)も指定できます。
出力モデルの設定は、起動したときにRunへ写します。起動した後でTaskを編集しても、そのRunの登録先は変わりません。登録の結果は、Run詳細の[出力モデル]で確認します。
| Runの結果 | 登録 |
|---|---|
| 完了 | バージョンを登録します。登録したモデルの系列を対象にした自動実行ルールがあれば、推論・評価が続けて動きます |
| 完了。学習コードが同じモデルへ自分で登録済み | Task側では登録しません(「学習コードが登録したバージョンを使用」)。バージョンも下流の実行も1つだけです |
| 完了。Artifactが無い、作成者が権限を失ったなど | 登録に失敗し、理由を表示します。Runは完了のまま残ります |
| 失敗・中止、テスト実行 | 登録しません |
コンピュータとMado連携を変更する
コンピュータは、全体設定の「コンピュータ」で足し、所有者と全体管理者が設定を変えます。SSH・Localを足せるのは全体管理者で、siteは誰でも足せます(コンピュータと公開範囲)。Mado連携は本体に標準搭載されているので、追加するものはありません。Projectの[連携]で接続設定を保存し、有効と無効を切り替えるのは全体管理者です(Mado連携)。
次に読む
- モデル登録後の自動実行で、登録したバージョンの推論と評価を自動で回します。
- 学習の途中再開で、止まった学習をcheckpointから続けます。