Skip to content

Taskとコードバージョン ​

Taskの詳細と出力モデルの設定

Taskは「どのコードを、どのモデル・データで、どこで動かすか」を保存した実行の設定です。Experimentの下に作り、Taskから通常実行とテスト実行を起動します。実行するコードはコードバージョンとして固定するため、コードを編集した後も、過去のJobで実際に動いた内容を確認できます。

こんなときに向いています ​

  • 同じ学習を、パラメータだけ変えて何度も起動したい
  • 本番の学習の前に、短いテストコマンドで動作を確かめたい
  • Gitのリポジトリを編集して試したいが、元のリポジトリへはpushしたくない
  • 学習が成功したら、出力した重みを自動でモデルのバージョンとして登録したい

全体の流れ ​

  1. 実行先のコンピュータを用意します。全体設定の「コンピュータ」で足すか、自分が使えるものを選びます。手順はコンピュータと公開範囲とSSH・Localのコンピュータを参照してください。
  2. Codeでコードを登録し、バージョンを作ります。
  3. TasksでTaskを作り、Experiment、コードバージョン、コンピュータを選んで保存します。
  4. [テスト実行]で動作を確かめてから、[通常実行]で起動します。
  5. 起動したRunで、メトリクス、ログ、終了状態、Artifactsを確認します。

Jobはworkerが実行します。対応するworkerが起動していないと、Jobは待機中のままです。workerの導入はworkerの導入と常駐を、始まらない理由の確かめ方はJobsの画面を参照してください。

コードバージョンを登録する ​

コードバージョンの編集ダイアログ

Codeで[コードを登録]を押してコードの名前を作り、[バージョンを作成]でバージョンを登録します。バージョンは保存した後に変更できません。編集して保存すると、新しいバージョンになります。

項目内容
バージョンバージョン名です。例:v1
RuntimePython、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を作る ​

  1. Tasksで[Taskを作成]を押します。
  2. 次の項目を入力して[保存]を押します。
項目内容
名前Taskの名前です。例:音声合成 学習
ExperimentsRunを記録するExperiment
実行種別学習、ファインチューニング、推論、評価、データ処理
モデルバージョン入力に使うモデルバージョン(fine-tuningの元、推論するバージョンなど)。任意
コードバージョン実行種別とモデル系列に対応するコードバージョンだけを選べます
入力データセットバージョン実行前にworkerが取得して渡すデータセットバージョン。任意
コンピュータ自分が使えて、コードバージョンのRuntimeに対応するコンピュータだけを選べます。Privateのコンピュータは所有者と、所有者が作ったService Accountだけが使えます。このTaskでSweepを作るときも、同じ条件のコンピュータだけを選べます(Sweep)
GPU IDコンピュータに登録したGPUから選びます。選ばなければCPUだけで実行します
パラメータ、タグJSONで指定します。例:{"epochs": 8}
  1. 一覧に追加された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の重みをモデルのバージョンとして登録できます。学習コードに登録の処理を書く必要はありません。

  1. [Taskを編集]を開き、[出力モデル]の[成功時にモデルバージョンを登録]を選びます。
  2. [登録先]で[既存のモデル]か[新しいモデルを作成]を選びます。
    • 既存のモデル: [登録先のモデル]を選びます。
    • 新しいモデル: [モデル名]と[モデル系列]を入力します。系列は、Taskのコードバージョンが対応する系列から選びます。同じ名前のモデルがあれば、そのモデルを使います。
  3. [Artifactのパス]に、学習コードが保存した重みのファイルのパスを入力します。例:model/weights.json。ファイルのパスと完全に一致させます。
  4. 必要なら[登録するバージョンの既定コードバージョン]を選び、[保存]を押します。
  5. [通常実行]を押すと、確認のダイアログに登録先のモデルが表示されます。

学習コードが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連携)。

次に読む ​