Repository navigation
Releases: aida0710/mado-ml-tracking
Release list
mado ML Tracking v0.5.3
コンピュータの無いProjectでは実行の画面を畳み、画面の点検で見つかったわかりにくい表示と名前を直しました。
変更点
- 実行の画面を畳む: 使えるコンピュータが1台も無いProjectでは、サイドバーの「実行」(Sweep・Task・Code・Workflow・Job・Hook・使えるコンピュータ)と、モデル画面の自動実行・昇格ポリシー・Aliasの保護のタブを出しません。設定画面に、コンピュータを登録すると出ることを案内します。
- Sweepの状態: 試行がすべて失敗・中止で終わったSweepは、完了ではなく失敗(理由
all_trials_failed)になります。 - 権限エラーの案内: tokenの権限が足りないときに勧める用途を、今のtokenの権限をすべて含むものにし、必要な権限を併記します。
- 名前の整理: Jobの「試行」を「実行回数」に(Sweepの試行と区別)、「Compute」を「使えるコンピュータ」に、実験画面の見出しを「すべての実験」か実験名にしました。日本語の画面に混ざっていた alias・policy・snapshot の表記をそろえ、「親データ版」を「親のバージョン」にしました。
- パンくず: 比較・レポート・Sweep・Workflow・モデルのバージョン・Runの画面に、Projectからのパンくずを付けました。
- Artifactのアップロード: モデル・Codeの画面にあったボタンを、Artifactの画面へ移しました。
- 内部: デザインシステム v0.7.2 の
uploadWithProgressを使うようにし、不安定だったテストを直しました。
互換性と更新手順
DBの移行と設定の名前の変更はありません。v0.5.0〜v0.5.2から更新するときは、配布物で更新する手順でイメージを差し替えます。
v0.4.0以前から更新するときは、先にv0.5.0の更新手順(環境変数の名前の付け替えなど)を済ませます。
mado ML Tracking v0.5.2
画面のAPIの呼び出しを、mado S3 Data Catalogと同じデザインシステムの取得処理(zodで応答を確かめる)にまとめ、エラーは訳さずAPIの文をそのまま表示します。本番を公開イメージの配布物で動かす手順も足しました。
変更点
- エラーの表示: 日本語の画面でエラーをcodeから訳すのをやめ、どちらの言語の画面でもAPIの文をそのまま表示します。画面の言語で出すのは、通信の失敗、応答の形が合わないとき、手前のプロキシがHTMLで返した413だけです。APIの形でない失敗は「HTTP 502 Bad Gateway」のように出ます。
- APIの呼び出し: デザインシステム v0.7.1 の
requestJsonで呼び、応答を@mmt/contractsのzodスキーマ(APIのルートの一覧と同じもの)で確かめます。 - 応答の修正: Experimentの応答が契約に無いMLflowの列まで返していたのを、契約の列だけにしました。Runの最新の値(latestMetrics)のNaN・Infinityを契約の型に合わせました。
- 本番の動かし方: サーバーでソースからビルドせず、配布物(digest固定の公開イメージ)と運用側の
.env・compose.override.ymlだけで動かす手順をdeploy/release/README.mdに書きました(更新・戻し方・ソースのcheckoutから移す手順)。 - 見た目: デザインシステム v0.7.1 で、行の高さをブラウザの既定として明示しました(見た目は変わりません)。
互換性と更新手順
DBの移行と設定の名前の変更はありません。v0.5.0・v0.5.1から更新するときは、配布物で更新する手順でイメージを差し替えます。
v0.4.0以前から更新するときは、先にv0.5.0の更新手順(環境変数の名前の付け替えなど)を済ませます。
mado ML Tracking v0.5.1
SSOユーザーの全体管理者を、Authentikのgroupではなくこのアプリの全体管理で決められるようにしました。
変更点
- 全体管理者をアプリで管理する:
MMT_OIDC_ROLE_MAPPING_JSONを空(未設定か{})にすると、AuthentikはログインできるかどうかだけをMMT_OIDC_ALLOWED_GROUPSで決め、全体管理者は「全体管理」→「ユーザー」でSSOユーザーにも付け外しできます。初めてSSOで入った人はMMT_OIDC_DEFAULT_ROLE(既定user)になり、以後のログインと再確認では全体管理者を変えません。groupの同期と、許可groupから外れた人を拒否する判定は今までどおりです。 - 対応表が無いときの動きが変わります: 以前は、対応表が無いとSSOユーザーはログインのたびに
MMT_OIDC_DEFAULT_ROLEになり、誰も全体管理者になりませんでした。v0.5.1では、対応表が無ければ全体管理者はアプリで管理し、ログインでは変えません。対応表がある環境の動きは変わりません。 GET /api/auth/config:methods.oidcにmanagesGlobalRole(Authentikのgroupが全体管理者を決めるか)を足しました。画面はこれを見て「管理者にする/外す」を出し分けます。PATCH /api/admin/users/:idの422profile_managed_by_ssoをOpenAPIに載せました(応答は以前から返していました)。
互換性と更新手順
DBの移行と設定の名前の変更はありません。v0.5.0から更新するときは、イメージを差し替えるだけです。
v0.4.0以前から更新するときは、先にv0.5.0の更新手順(環境変数の名前の付け替えなど)を済ませます。
SSOで対応表を使わずに運用していた環境では、更新後もSSOユーザーの全体管理者は今のまま残り、ログインで外れなくなります。外すときは「全体管理」→「ユーザー」で外します。
mado ML Tracking v0.5.0
開発と運用の土台とAPIの形を、兄弟製品のMadoにそろえました。監査ログの値の名前を変え、Webのnginxを非rootで動かし、APIはビルドしたJavaScriptで動かします。APIのエラー応答は英語の文とcodeになり、ヘルスチェックはGET /healthzに、API tokenの前置きはmado_mt_(Job tokenはmado_mtj_)になりました。発行済みのAPI tokenはすべて使えなくなるので、更新後に発行し直してください。
設定の環境変数の名前は、すべてMMT_で始まる形になりました(AUTH_MODE→MMT_AUTH_MODE、S3_BUCKET→MMT_S3_BUCKETなど)。更新する前に、.envとcompose.override.ymlの名前を付け替えてください(環境変数の名前の付け替え)。
変更点
API
-
監査ログ(AuditEvent)の
outcomeのfailedをfailureに、接続元の項目ipをipAddressに変えました(DBの列はip_address)。GET /audit-events・GET /projects/:p/audit-eventsのoutcomeの絞り込みもfailureを使います。既存の記録はDBの更新(071_audit_failure_and_ip_address.sql)で書き換えます。 -
docs/openapi.jsonとGET /api/openapi.jsonのinfo.versionが、契約の版(0.1)ではなくアプリの版になりました。 -
独自APIのエラー応答を
{"error": <英語の文>, "code": <理由の名前>}にそろえました。errorは今まで日本語でしたが、英語になります。文に入る値(足りないscope、parameter名、上限など)はerror・codeの横の項目にも入ります(例:scope_requiredのscope・purpose、invalid_requestのfields)。codeの一覧は@mmt/contractsのAPI_ERROR_CODESで、OpenAPIのエラー本文のschema名はApiErrorからApiErrorBodyに変わりました。MLflow互換APIは今までどおり{"error_code", "message"}で、messageが英語になります。 -
Madoと同じ意味のcodeは同じ名前にしました。
旧 新 insufficient_scopescope_requiredinvalid_parameter_value(Runの検索式・cursorなど)invalid_requestresource_already_existsalready_existsinvalid_rangerange_not_satisfiablelast_global_adminlast_active_adminlocal_account_requiredlocal_credential_unavailablescope_exceeds_issuertoken_authority_exceededパスワード変更で現在のパスワードの誤り: 401 invalid_credentials400 incorrect_password -
Sweepの探索空間とearly_terminateの誤り(
sweep_space_invalid・sweep_early_terminate_invalid)は、reason(values_empty・range_orderなど)とparameterなどの項目で理由を示します。 -
ヘルスチェックの
GET /healthとGET /api/healthをやめ、GET /healthz(/apiの外、認証なし)が{"status":"ok"}を返すようにしました。DBに届かなければ503database_unavailableです。 -
API token(個人・Service Account・worker・launcher)の値は
mado_mt_、Job tokenはmado_mtj_で始まります。認証はこの形の値だけを受け付け、mmt_・mmtj_で始まる値は401invalid_tokenです。一覧に出す先頭は16文字(前置きと8文字)になりました。
Web
- 画面の応答に、Content-Security-Policy、
X-Content-Type-Options: nosniff、X-Frame-Options: DENY、Referrer-Policy: no-referrerを付けます。外部のサイトから画面を読み込むことはできません。 - APIのエラーは、日本語の画面ではcodeから訳した文を出します。訳の無いcodeはAPIの英語の文を出し、
invalid_requestなどの理由の幅が広いcodeは日本語の文のあとにAPIの英語の文を括弧で添えます。英語の画面はAPIの英語の文を出します。
コンテナ・Compose
- Webのイメージは
nginxinc/nginx-unprivilegedになり、nginxはroot以外で動きます。コンテナの中で待ち受けるportは80から8080に変わりました。ホスト側(127.0.0.1:5182)は変わりません。 - APIとプレビュー用workerのイメージは、TypeScriptをビルドしたJavaScriptを
nodeで動かします。イメージにはTypeScriptのソースとビルドの道具が入りません。npm run db:migrate -w @mmt/apiなどのコマンドは今までどおり使えます。 - 全イメージのベースイメージをdigestで固定しました。
compose.ymlにproject名(name: mado-model-tracking)を入れました。展開先のディレクトリ名にかかわらず、同じコンテナとvolumeを使います。apiにヘルスチェック(GET /healthz)を付け、webはapiがhealthyになってから起動します。Webのnginxとedgeのrunner用nginx(deploy/edge/runner-api.conf.template)は/healthzもAPIへ渡します。edgeでは今までの/api/healthと同じく、Job tokenのあるrunnerにだけ答えます。
設定(環境変数)
- APIとプレビュー用workerが読む環境変数の名前を、すべて
MMT_で始まる形にしました(兄弟製品のmado S3 Data CatalogはMDC_)。旧い名前は読みません。対応は環境変数の名前の付け替えの表のとおりです。値の形は変わりません。 - 旧い名前だけが設定され、新しい名前が無いと、API・プレビュー用worker・
db:migrate・bootstrap-admin・backfill-run-mediaはOld environment variable names are set: AUTH_MODE was replaced by MMT_AUTH_MODEのように、残っている旧名と新しい名前を並べて起動しません。表示するのは名前だけで、値は表示しません。今までのDATABASE_URL(→MMT_DATABASE_URL)とOIDC_ADMIN_GROUP(→MMT_OIDC_ROLE_MAPPING_JSON)の検査もここにまとめました。新しい名前もあるときは新しい名前を使い、旧名は無視します。 - Webのイメージのビルド引数
VITE_GIT_COMMIT・VITE_GIT_DATE(「このアプリについて」に出すコミットと日時)を、MMT_GIT_COMMIT・MMT_GIT_DATEにしました。 MLFLOW_TRACKING_URI・MLFLOW_TRACKING_TOKENなどMLflowのクライアントの標準の変数、AWS SDKのAWS_*、PostgresのイメージのPOSTGRES_*、NODE_ENVは変わりません。SDK・worker・launcherが読む変数(MMT_API_URL、MMT_API_TOKEN、MMT_WORKER_*など)は元からMMT_で始まっているので、変わりません。
SDK・worker・launcher
mado-tracking-worker doctorとコンピュータの接続確認は、MMT_API_URLの/apiを外した/healthzでAPIへの到達を確かめます。- workerとrunnerは
mado_mtj_で始まるJob tokenだけを受け付けます。v0.4.0までのworker・launcherは新しいAPIが発行するJob tokenを受け付けないので、APIと一緒に更新してください。
そのほか
- Apache License 2.0のLICENSEとNOTICEを付けました。配布物にも入ります。
互換性と更新手順
更新前にDBをバックアップしてください。
- Webのportを書き換えている場合(
compose.override.ymlのportsなど)は、コンテナ側の番号を80から8080へ直します。例:'0.0.0.0:80:80'→'0.0.0.0:80:8080'。 - v0.4.0までの配布物(bundle)から入れた環境は、Composeのproject名が展開先のディレクトリ名(例:
mado-ml-tracking-v040)になっています。docker compose lsで今の名前を確かめ、.envにCOMPOSE_PROJECT_NAME=<その名前>を書いてから更新します。書かないと新しい空のvolumeで起動します。リポジトリをmado-model-trackingというディレクトリに置いて動かしている環境は、そのままで同じ名前です。 .envとcompose.override.ymlの環境変数の名前を付け替えます(環境変数の名前の付け替え)。Composeを使わずに動かしている場合は、APIとプレビュー用workerに渡している環境変数を同じ表のとおりに直します。- 動いているJobを終わらせるか止めます。DBの更新(072)でJob tokenも失効するので、動いたままのJobはAPIへ記録できなくなります。
- APIとプレビュー用workerを止め、新しいイメージでDBを更新してから(
071_audit_failure_and_ip_address.sql、072_token_prefix.sql)、新しいAPI・プレビュー用worker・Webを起動します。071は監査ログの列名を変えるので、v0.4.0のAPIとは両立しません。Webのコンテナも入れ替えてください。 - 072は、発行済みのAPI tokenとJob tokenをすべて失効させます(監査ログの
token.revokeに、details.reasonがtoken_prefix_changedの記録が残ります)。使っていたものは発行し直して差し替えます。- 個人のtoken・Service Accountのtoken: [プロジェクト設定]の[API tokenを発行]かService Accountの画面で、同じ用途・scopeで発行します。SDK・MLflowの
MMT_API_TOKEN・MLFLOW_TRACKING_TOKEN、学習のジョブが読むenv file、CIの設定などを新しい値に替えます。tokenを秘密の管理の仕組みに置いている場合は、そこに入れ直します。 - worker: Service Accountでworker用のtokenを発行し、
mado-tracking-worker install --token-file(ComposeのworkerはMMT_WORKER_TOKEN_FILE、既定はvar/worker-token)で差し替えます。 - launcher: 全体管理の「ランチャー」で各launcherの[tokenを作り直す]を押し、
launcher.tomlのtoken_fileが指すファイルを新しい値に差し替えます。
- 個人のtoken・Service Accountのtoken: [プロジェクト設定]の[API tokenを発行]かService Accountの画面で、同じ用途・scopeで発行します。SDK・MLflowの
- ヘルスチェックを
/healthか/api/healthで見ている監視は、/healthzに直します。Webの127.0.0.1:5182/healthzでも確かめられます。 - APIのエラーの
errorの文や、上の表の旧いcodeを見ているスクリプトは、新しいcodeで判定するように直します。 - 監査ログをAPIで読んで
outcomeのfailedやipを見ているスクリプトは、failureとipAddressに直します。 - Composeを使わずにソースから動かしている場合は、
npm run build -w @mmt/apiでAPIをビルドしてから、npm run db:migrate -w @mmt/api・npm run start -w @mmt/apiを実行します。
worker・launcher・SDKは、Job tokenの前置きとヘルスチェックの経路が変わったので、APIと同じv0.5.0にそろえてください。
環境変数の名前の付け替え
v0.5.0のAPIとプレビュー用workerは、次の表の旧い名前を読みません。.envとcompose.override.yml(Composeのenvironment)で、名前だけを付け替えます。値は変えません。
| 旧い名前 | 新しい名前 |
|---|---|
HOST |
MMT_HOST |
PORT |
MMT_PORT |
AUTH_MODE |
MMT_AUTH_MODE |
AUTH_SESSION_IDLE_SECONDS |
MMT_AUTH_SESSION_IDLE_SECONDS |
AUTH_SESSION_ABSOLUTE_SECONDS |
MMT_AUTH_SESSION_ABSOLUTE_SECONDS |
OIDC_ISSUER_URL |
MMT_OIDC_ISSUER_URL |
OIDC_CLIENT_ID |
MMT_OIDC_CLIENT_ID |
OIDC_CLIENT_SECRET |
MMT_OIDC_CLIENT_SECRET |
OIDC_SCOPES |
MMT_OIDC_SCOPES |
OIDC_ALLOWED_GROUPS |
MMT_OIDC_ALLOWED_GROUPS |
OIDC_ROLE_MAPPING_JSON |
MMT_OIDC_ROLE_MAPPING_JSON |
OIDC_DEFAULT_ROLE |
MMT_OIDC_DEFAULT_ROLE |
OIDC_AUTO_LINK_VERIFIED_EMAIL |
MMT_OIDC_AUTO_LINK_VERIFIED_EMAIL |
OIDC_LABEL |
MMT_OIDC_LABEL |
OIDC_ALLOW_INSECURE_HTTP |
MMT_OIDC_ALLOW_INSECURE_HTTP |
OIDC_RECHECK_SECONDS |
MMT_OIDC_RECHECK_SECONDS |
OIDC_TOKEN_SYNC_MAX_AGE_SECONDS |
MMT_OIDC_TOKEN_SYNC_MAX_AGE_SECONDS |
DEVELOPMENT_ADMIN_EMAIL |
MMT_DEVELOPMENT_ADMIN_EMAIL |
ARTIFACT_FILESYSTEM_ROOT |
MMT_ARTIFACT_FILESYSTEM_ROOT |
S3_BUCKET |
MMT_S3_BUCKET |
S3_ENDPOINT |
MMT_S3_ENDPOINT |
S3_REGION |
MMT_S3_REGION |
S3_PREFIX |
MMT_S3_PREFIX |
S3_FORCE_PATH_STYLE |
MMT_S3_FORCE_PATH_STYLE |
S3_ACCESS_KEY_ID |
MMT_S3_ACCESS_KEY_ID |
S3_SECRET_ACCESS_KEY |
MMT_S3_SECRET_ACCESS_KEY |
Webのイメージを自分でビルドしている場合は、ビルド引数VITE_GIT_COMMIT・VITE_GIT_DATEをMMT_GIT_COMMIT・MMT_GIT_DATEに替えます。
すでにMMT_で始まっている変数(MMT_DATABASE_URL、MMT_PUBLIC_URL、MMT_WEB_ORIGIN、MMT_STORAGE_SECRET_KEY、MMT_POSTGRES_PASSWORD、MMT_TOKEN_DEFAULT_LIFETIME_DAYS、MMT_FILESYSTEM_STORAGE_DIRなど)と、COMPOSE_FILE・COMPOSE_PROJECT_NAME・NODE_ENVは変わりません。保存先の認証情報を暗号化する鍵MMT_STORAGE_SECRET_KEYは、名前も値も今のままにします(値を変えると、保存済みの暗号文が読めなくなります)。
compose.override.ymlのAUTH_MODEは必ず直してください。 compose.ymlのapiはenvironmentでMMT_AUTH_MODE: oidcを渡し、これは.envより優先されます。localかhybridで動かしている環境は、compose.override.ymlのapiのenvironmentにAUTH_MODE: localなどを書いているはずです。これが旧い名前のままだと無視され、APIはoidcで起動しようとしてMMT_OIDC_ISSUER_URL and MMT_OIDC_CLIENT_ID are required when MMT_AUTH_MODE=oidcで止まります。同じようにHOST・PORT・ARTIFACT_FILESYSTEM_ROOTは、compose.ymlとイメージが新しい名前で値を渡すので、旧い名前が残っていても起動時の検査では見つかりません。下の手順で全部付け替えます。
手順
.envのあるComposeのディレクトリで、APIを止める前に行います。ファイルを書き換えるだけなので、動いているコンテナは作り直すまで今の設定で動き続けます。値には認証情報が入っているので、画面に出しません。cat .envや、絞り込まないdocker compose configは値を表示するので使いません。
-
2つのファイルをバックアップします。
umask 077 backup="var/backups/env-names-$(date +%Y%m%d-%H%M%S)" mkdir -p "$backup" cp -p .env "$backup/" if [ -f compose.override.yml ]; then cp -p compose.override.yml "$backup/"; fi
-
今の名前を確かめます。名前だけを表示し、値は表示しません。
grep -oE '^[A-Za-z_][A-Za-z0-9_]*=' .env | tr -d '=' | sort if [ -f compose.override.yml ]; then grep -noE '^[[:space:]]+(- )?[A-Za-z_][A-Za-z0-9_]*[:=]' compose.override.yml fi
-
表のとおりに名前を付け替えます。
.envは旧名=で始まる行、compose.override.ymlは旧名:(mapの形)か- 旧名=(listの形)の行だけを書き換えます。renames=' HOST:MMT_HOST PORT:MMT_PORT AUTH_MODE:MMT_AUTH_MODE AUTH_SESSION_IDLE_SECONDS:MMT_AUTH_SESSION_IDLE_SECONDS AUTH_SESSION_ABSOLUTE_SECONDS:MMT_AUTH_SESSION_ABSOLUTE_SECONDS OIDC_ISSUER_URL:MMT_OIDC_ISSUER_URL OIDC_CLIENT_ID:MMT_OIDC_CLIENT_ID OIDC_CLIENT_SECRET:MMT_OIDC_CLIENT_SECRET OIDC_SCOPES:MMT_OIDC_SCOPES OIDC_ALLOWED_GROUPS:MMT_OIDC_ALLOWED_GROUPS OIDC_ROLE_MAPPING_JSON:MMT_OIDC_ROLE_MAPPING_JSON OIDC_DEFAULT_ROLE:MMT_OIDC_DEFAULT_ROLE OIDC_AUTO_LINK_VERIFIED_EMAIL:MMT_OIDC_AUTO_LINK_VERIFIED_EMAIL OIDC_LABEL:MMT_OIDC_LABEL OIDC_ALLOW_INSECURE_HTTP:MMT_OIDC_ALLOW_INSECURE_HTTP OIDC_RECHECK_SECONDS:MMT_OIDC_RECHE...
mado ML Tracking v0.4.0
古い版のworker・launcher・SDK・データを受け付けるために残していた扱いを削除しました。残っていた古い形のデータは、DBの更新(069・070)で今の形へ移します。
変更点
API
- Run一覧
GET /projects/:p/runsを削除しました。Runの一覧はPOST /projects/:p/runs/searchを使います。 - Dataset一覧・Artifact一覧・Job一覧などのqueryは、知らない条件を422
invalid_requestで拒否します。省略時の既定値は変わりません。 - MLflow互換のモデルバージョン検索は、MLflowに無い
versionとattributes.を受け付けません。version_number、attribute.、前置きなしの属性名を使います。 - 旧方式のMado連携(
kind=legacy、移行待ちの接続、移行完了API)を削除しました。 - コンピュータの所有者(
ownerUserId)とCodeVersionのruntimeを必須にしました。
worker・launcher・SDK
- workerは
workerInfo(version・hostname・parallelJobs・sshFiles・capabilities)を必ず送ります。送らないworkerのclaimは拒否します。 - コンテナの
result.jsonと接続確認の結果は、version 2だけを受け付けます。pathで宣言したDatasetにはdigestを書きません(ファイルから計算します)。 - worker CLIはサブコマンドが必須です(
mado-tracking-worker run [--once])。 - 古いAPIに合わせて送る項目を減らす扱いを削除しました。worker・launcher・SDKはAPIと同じ版を使ってください。
- SDKの
register_model(name=...)を削除しました(model_name=を使います)。register_code・create_code_versionはruntimeが必須です。
設定
OIDC_ADMIN_GROUPとDATABASE_URLを削除しました。どちらかが設定されているとAPIは起動しません。OIDC_ROLE_MAPPING_JSONとMMT_DATABASE_URLを使います。OIDC_ROLE_MAPPING_JSONが無いとき、mmt-adminsを全体管理者にする既定はなくなりました。SSOで全体管理者を決めるには対応表が必要です。
互換性と更新手順
更新前にDBをバックアップしてください。
.envからOIDC_ADMIN_GROUPとDATABASE_URLを消します(OIDC_ADMIN_GROUPを使っていた場合はOIDC_ROLE_MAPPING_JSONへ移します)。- APIを止め、新しいイメージでDBを更新してから(
069_require_current_protocol.sql・070_require_computer_owners.sql)、新しいAPIを起動します。069は今の版のAPIと両立しません。- 069は、旧方式のMado連携の接続と、配送先を確定できない送信待ちのイベントを消します(DatasetVersionのURI・digest・来歴は残します)。接続確認の結果をversion 2へ、S3の保存先の
multipartEnabledを明示値にし、workerの情報が欠けたpresenceは、そのleaseを失効させてから消します。 - 070は、所有者のいないコンピュータに、成功した作成の監査記録が1人を指すときだけ所有者を補います。所有者を決められないコンピュータや設定の欠けたsiteが残っていると、更新は止まり、DBは何も変わりません。前の版で所有者を設定するかsiteを直してから、もう一度更新してください。
- 069は、旧方式のMado連携の接続と、配送先を確定できない送信待ちのイベントを消します(DatasetVersionのURI・digest・来歴は残します)。接続確認の結果をversion 2へ、S3の保存先の
- worker・launcher・SDKをこの版へ更新します。
Mado連携は引き続きMado v0.2.1以降で動きます。
配布物
Linux amd64/arm64向けに、Web、API、プレビュー用worker、実行worker、サイトlauncherの5種類をGHCRで配布します。イメージ名はghcr.io/aida0710/mado-ml-tracking-{web,api,preview,worker,launcher}:v0.4.0です。添付のmado-ml-tracking-v0.4.0.tar.gzには、イメージをdigestで固定したCompose、設定例、導入手順が入っています。SHA-256のチェックサムとビルド証明も添付します。
mado ML Tracking v0.3.0
APIトークンから、トークンの発行・失効、Service Accountの管理、全体の監査ログ、ユーザー管理を使えるようになりました。あわせて、トークンまわりの古い形式の受け付けをやめ、残っていた古い形式のトークンはDBの更新で失効させます。
変更点
トークンから使える操作
- scopeに
tokens:manage・audit:read・users:manageを追加しました。adminはこの3つを含みません。名前を指定して付けたトークンだけが持つので、これまでのトークンでできることは増えません。 tokens:manageを持つトークンは、APIでトークンの発行・失効と、Service Accountの作成・変更・トークン発行ができます。扱えるのは、呼び出したトークンのscope・Project・有効期限の範囲に収まるトークンだけです(範囲外は403scope_exceeds_issuer・project_forbidden・token_outlives_issuer)。audit:readとusers:manageは、全体管理者がProjectを指定せずに発行するトークンだけが持てます。全体の監査ログはadminとaudit:read、ユーザー一覧はadminとusers:manageで読めます。ユーザーの作成・変更・一時パスワードの発行には、すべてのscopeが要ります。- 自分のパスワード変更、コンピュータの自分の設定、アーカイブしたProjectの完全な削除は、引き続きブラウザだけで行えます。
古い形式の扱いの削除
- 個人向けのトークン発行(
POST /api/tokens)からkindの指定を外しました。種別は所有者で決まります(人はpersonal、Service Accountはservice)。kindを送ると422になります。 TokenSummaryのlegacyを削除し、tokenPrefixを必須にしました。画面の「旧形式」表示もなくなりました。- 設定
MMT_TOKEN_MAX_LIFETIME_DAYSは読まなくなりました。期限を省略したトークンの既定日数はMMT_TOKEN_DEFAULT_LIFETIME_DAYSだけで決まります。
互換性と更新手順
更新前にDBをバックアップし、新しいAPIを起動する前に、新しいイメージでDBを更新してください(068_revoke_legacy_tokens.sql)。
- 068は、人が所有するservice token(Service Account導入前の形式)と、先頭12文字を保存する前に発行したトークンを失効させます。理由は監査ログの
token.revokeのdetails.reasonに残ります。これらを使っていたworker・SDK・スクリプトは、Service Accountか個人のトークンを発行し直して差し替えてください。 .envでMMT_TOKEN_MAX_LIFETIME_DAYSを使っている場合は、値を変えずにMMT_TOKEN_DEFAULT_LIFETIME_DAYSへ名前を変えてください。変えないと既定の365日になります。POST /api/tokensにkindを送っているクライアントは、その項目を外してください。
Mado連携は引き続きMado v0.2.1以降で動きます。
配布物
Linux amd64/arm64向けに、Web、API、プレビュー用worker、実行worker、サイトlauncherの5種類をGHCRで配布します。イメージ名はghcr.io/aida0710/mado-ml-tracking-{web,api,preview,worker,launcher}:v0.3.0です。添付のmado-ml-tracking-v0.3.0.tar.gzには、イメージをdigestで固定したCompose、設定例、導入手順が入っています。SHA-256のチェックサムとビルド証明も添付します。
mado ML Tracking v0.2.0
mado S3 Data Catalogとの連携を、アクセストークン1本で設定できるようになりました。許可するNamespaceは入力せず、Madoから自動で取得します。あわせて、来歴(Lineage)を既存の記録を書き換えずに補う機能と、モデルごとの来歴の表示を追加しました。
変更点
Mado連携
- 参照用・送信用・容量取得用の3つのキーを、Madoのアクセストークン1本にまとめました。「許可Namespace」の入力欄はなくなりました。
- 検索と取り込みのたびに、Madoの
/api/mado/access-tokenからトークンの許可範囲を読みます。Madoでトークンの許可Namespaceを変えても、連携の設定を保存し直す必要はありません。全Namespaceを許可したトークンでは、Namespaceを指定せずに1回で検索します。 - [接続を確認]で、許可されている操作・許可Namespace・有効期限を画面に表示します。DataLineageの読み取りか送信を許可していないトークンや、「RunのNamespace」を許可していないトークンは、Runを送って失敗する前にここで理由を示して断ります。
- 容量メトリクスは、確認時のトークンに容量の読み取りがある場合だけ表示します。
来歴(Lineage)
- 既存のRun・バージョンを書き換えずに、データ・モデル・Runの関係を追記するAPIを追加しました。参照と、学習・生成の関係を区別します。
- モデル版の詳細と一覧から、そのモデルの祖先と子孫だけを表示できます。全体の図と既存の検索は従来どおりです。
互換性と更新手順
更新前にDBをバックアップし、新しいAPIを起動する前に、新しいイメージでDBを更新してください(066_lineage_relation_additions.sqlと067_mado_access_token.sql)。
- Mado連携を設定している場合: v0.1.0で保存した参照用・送信用・容量取得用のキーは使われなくなり、「未設定」と表示されます。3つのキーは1つにまとめられないため、Madoでアクセストークンを発行し、[Madoの接続設定]で入れ直してから[接続を確認]を押してください。暗号化して保存した以前の値はDBから消しません。
- Mado側はv0.2.1以降が必要です。
/api/mado/access-tokenの無いMadoへの接続確認は、「Madoを更新してください」という理由で止まります。 - APIの変更: 連携の
credentialsは{accessToken}だけになり、configからnamespacesを外しました。POST /api/projects/:p/plugins/:id/checkはPluginConnectionを返します(以前はPluginManifest)。
配布物
Linux amd64/arm64向けに、Web、API、プレビュー用worker、実行worker、サイトlauncherの5種類をGHCRで配布します。イメージ名はghcr.io/aida0710/mado-ml-tracking-{web,api,preview,worker,launcher}:v0.2.0です。添付のmado-ml-tracking-v0.2.0.tar.gzには、イメージをdigestで固定したCompose、設定例、導入手順が入っています。SHA-256のチェックサムとビルド証明も添付します。
mado ML Tracking v0.1.0
mado ML Trackingの初回リリースです。実験の比較、モデル・コード・データセットのバージョン管理、学習・推論・評価の実行を同じアプリで扱います。
主な機能
- Runのパラメータ・メトリクス・ログ・音声や画像の記録と比較
- モデル・コード・データセットの固定バージョン、生成元Run、加工元の来歴
- SSH workerによる学習・推論・評価、サイトへのJob投入、コード編集と前処理ワークフロー
- モデル登録後の自動推論・評価、探索実験、再開、共有レポート
- Python SDKとMLflow 3互換API、ファイルシステム・S3互換ストレージへの保存
- ローカルアカウント・OIDCによるログイン、Projectごとの権限、API token、監査ログ
- 標準搭載のmado S3 Data Catalog連携(初期状態は無効)、日本語・英語の画面とドキュメント
配布物と導入
Linux amd64/arm64向けに、Web、API、プレビュー用worker、実行worker、サイトlauncherの5種類をGHCRで配布します。イメージ名はghcr.io/aida0710/mado-ml-tracking-{web,api,preview,worker,launcher}:v0.1.0です。
添付のmado-ml-tracking-v0.1.0.tar.gzには、イメージをdigestで固定したCompose、設定例、初回起動の手順、worker・launcherの設定例が入っています。ソースのビルドは不要です。SHA-256のチェックサムとビルド証明も添付します。
展開した配布物のREADMEに従って設定とDB更新、初期管理者の作成を行ってください。ドキュメントには機能、SDKでの記録、実行環境の登録手順があります。
初期リリースでの制限
HTTPSの入口と、実行するコンピュータ・SSH鍵・ストレージは利用者の環境で用意します。GPU用の学習イメージはこの配布物に含めません。Mado連携を使う場合は、Data Catalog側の参照APIと互換Dataset Registryを設定してください。
MLflow 3互換APIの対応範囲はMLflowの手順を参照してください。モデルの配信、MLflowのTracing・GenAI・Gateway・Prompt Registryは対象外です。