環境変数
API serverは、リポジトリの直下の.envを読みます。雛形は.env.exampleです。.envには認証情報が入るので、chmod 600 .envで本人だけが読めるようにし、リポジトリやチャットに貼らないでください。
cp .env.example .env
chmod 600 .env値を変えたら、APIを再起動します。形式の違う値や、足りない設定があると、APIは設定の名前だけを表示して起動しません。
API server: 基本
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_DATABASE_URL | なし(必須) | PostgreSQLの接続URL |
NODE_ENV | development | 本番ではproduction。HTTPSのURLが必須になり、開発用の機能が使えなくなる |
HOST | 127.0.0.1 | APIが待ち受けるアドレス |
PORT | 4182 | APIが待ち受けるポート |
MMT_PUBLIC_URL | http://127.0.0.1:4182 | 利用者が開くURL。SSOのcallbackもこのURLから作る |
MMT_WEB_ORIGIN | http://127.0.0.1:5182 | 画面のorigin。通知のリンクにも使う |
MMT_ALLOW_PRIVATE_ORIGINS | false | trueにすると、LAN・VPNのprivate IPとlocalhostのoriginも許可する。開発用。サーバではfalseのままにする |
MMT_TRUSTED_PROXY_HOPS | 0(composeでは1) | APIの前にあり、X-Forwarded-Forに接続元を足すproxyの数。ログインの回数制限と監査の接続元に使う。composeのwebの前にもう1段proxyを置くなら2 |
MMT_ALLOW_SEED | false | 見本データの投入を許す。AUTH_MODE=developmentのときだけ効く |
MMT_ALLOW_LOCAL_EXECUTOR | false | local executorを許す。AUTH_MODE=developmentのときだけ効く |
DEVELOPMENT_ADMIN_EMAIL | admin@localhost | 開発用ログインで全体管理者になるメールアドレス |
認証とSSO
詳しい設定は認証方式とローカルアカウントとAuthentik(SSO)を参照してください。
| 変数 | 既定 | 内容 |
|---|---|---|
AUTH_MODE | hybrid | local、oidc、hybrid、development |
AUTH_SESSION_IDLE_SECONDS | 604800(7日) | 操作しないままsessionが切れるまでの秒数。300以上 |
AUTH_SESSION_ABSOLUTE_SECONDS | 604800(7日) | ログインからsessionが切れるまでの秒数。3600以上で、idle以上 |
OIDC_ISSUER_URL | なし | AuthentikのApplicationのIssuer。oidc・hybridで必須。HTTPSのURL |
OIDC_CLIENT_ID | なし | ProviderのClient ID。oidc・hybridで必須 |
OIDC_CLIENT_SECRET | なし | ProviderのClient Secret |
OIDC_ALLOWED_GROUPS | なし | ログインを許すgroup(カンマ区切り)。oidc・hybridで必須 |
OIDC_ROLE_MAPPING_JSON | なし | group→全体のroleの対応表。例: {"mmt-admins":"admin","mmt-users":"user"} |
OIDC_DEFAULT_ROLE | user | 対応表のどのgroupにも入っていない人のrole |
OIDC_SCOPES | openid profile email offline_access | 要求するscope。openidは必須。refresh tokenにはProvider側のoffline_access mappingも必要 |
OIDC_LABEL | Authentik | ログイン画面のSSOボタンの表示名 |
OIDC_AUTO_LINK_VERIFIED_EMAIL | false | 同じメールアドレスのローカルアカウントへ自動で結び付けるか |
OIDC_ALLOW_INSECURE_HTTP | false | loopbackのHTTPのIssuerを許す(試験用)。本番では使えない |
MMT_SESSION_ENCRYPTION_KEY | なし | sessionに保存するAuthentikのtokenの暗号鍵(base64の32 byte)。oidc・hybridで必須 |
OIDC_RECHECK_SECONDS | 60 | SSOのsessionのgroupを確かめ直す間隔(秒) |
OIDC_TOKEN_SYNC_MAX_AGE_SECONDS | 604800(7日) | SSOのユーザーのAPI tokenを使える、最後のgroupの同期からの秒数。60以上 |
MMT_TOKEN_DEFAULT_LIFETIME_DAYS | 365 | API token発行で期限を省略したときの既定日数。1〜3650。expiresAt: nullは無期限、明示する未来の日時には上限なし。 |
暗号鍵はターミナルで作ります。MMT_SESSION_ENCRYPTION_KEYとMMT_STORAGE_SECRET_KEYには別の値を使ってください。
openssl rand -base64 32Artifactと保存先
保存先の設定は保存先で詳しく説明します。
| 変数 | 既定 | 内容 |
|---|---|---|
ARTIFACT_FILESYSTEM_ROOT | APIの作業ディレクトリのvar/artifacts | ファイルシステムの保存先の場所。相対パスはAPIの作業ディレクトリから数えるので、本番では絶対パスにする |
S3_BUCKET | なし | 設定すると、環境変数のS3を保存先として選べる |
S3_ENDPOINT | なし(AWS S3) | S3互換ストレージのendpoint |
S3_REGION | us-east-1 | region |
S3_PREFIX | なし(bucketの直下) | bucketの中のprefix。.env.exampleではmado-model-tracking |
S3_FORCE_PATH_STYLE | false | path-styleのURLを使う |
S3_ACCESS_KEY_ID、S3_SECRET_ACCESS_KEY | なし | S3の認証情報。無ければAWS SDKの標準の方法で探す |
MMT_STORAGE_SECRET_KEY | なし | 画面で追加したS3の保存先のシークレットをDBで暗号化する鍵(base64の32 byte) |
MMT_HOOK_SECRET_KEY | なし | Webhook のフックのシークレットをDBで暗号化する鍵(base64の32 byte)。無いと、Webhook のフックを作れず、保存済みのフックの署名も確かめられない |
MMT_ARTIFACT_MAX_BYTES | 214748364800(200GiB) | Artifact 1件の上限 |
MMT_ARTIFACT_DELETE_GRACE_DAYS | 7 | 削除したArtifactの本体を消すまでの日数。0〜3650 |
MMT_UPLOAD_REQUEST_TIMEOUT_MS | 0(無効) | uploadの要求全体の締め切り |
MMT_UPLOAD_IDLE_TIMEOUT_MS | 120000 | 通信が止まったuploadを切るまでの時間 |
MMT_MLFLOW_MULTIPART_UPLOADS | true | MLflow SDKのmultipart uploadを受け付ける |
MMT_MLFLOW_MULTIPART_DOWNLOADS | false | 変えないでください。trueにするとMLflow 3.17以降のSDKのdownloadが失敗する |
MMT_UPLOAD_FINALIZE_WAIT_MS | 100000 | MLflowのmultipart uploadの完了を待つ時間 |
通知
詳しくは通知と運用アラートを参照してください。
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_NOTIFICATION_* | なし | WebhookのURLと署名の鍵。名前は自由に付け、通知先にはその名前を登録する |
MMT_SMTP_URL | なし | SMTPサーバーのURL。smtp://(STARTTLS)かsmtps:// |
MMT_SMTP_FROM | なし | 送信元のアドレス。例: mado ML Tracking <mmt@example.com> |
NODE_EXTRA_CA_CERTS | なし | 社内CAの証明書(PEM)のパス。SMTPやWebhookの送信先の検証に使う |
Mado連携
Mado連携はAPI serverに標準搭載されています。別のサービスや、連携だけの.envはありません。連携のためにAPI serverの.envに置くのは、Madoのアクセストークンを暗号化する鍵だけです。MadoのURLとアクセストークンは環境変数ではなく、全体管理者がProjectの[連携]で保存します。NamespaceはアクセストークンからMadoが返すので、どこにも設定しません(Mado連携)。
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_PLUGIN_SECRET_KEY | なし | Madoのアクセストークンを、DBで暗号化する鍵(base64の32 byte)。Mado連携を使わないなら不要。無いとアクセストークンを保存できず、連携を有効にできない |
- 鍵は
openssl rand -base64 32で作り、ほかの暗号鍵(MMT_SESSION_ENCRYPTION_KEY、MMT_STORAGE_SECRET_KEY、MMT_HOOK_SECRET_KEY)とは別の値にします。 - アクセストークンを保存したあとは、鍵を変えたり消したりしないでください。保存済みのトークンを復号できなくなります。鍵を失ったときは、元の鍵を戻すか、保存済みのアクセストークンをすべて入れ直します。DBを復元するときにも要るので、鍵も安全な場所に保管してください。
そのほかのAPI serverの設定
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_CHECKPOINT_KEEP_COUNT | 5 | Runごとに一覧へ出すcheckpointの数 |
MMT_CSV_EXPORT_MAX_ROWS | 50000 | Run検索のCSV出力の最大行数 |
MMT_REPORT_SNAPSHOT_MAX_BYTES | 52428800 | 共有レポートの1つのバージョンで固定するデータの上限(バイト) |
MMT_GIT_SSH_KEY_PATH、MMT_GIT_KNOWN_HOSTS_PATH | なし | エディタへSSHのGitリポジトリを読み込むための秘密鍵とknown_hosts(絶対パス)。両方を設定する |
preview worker
長い音声・動画のプレビューを作るworker(npm run preview-worker -w @mmt/api、またはcomposeのpreview)の設定です。DBと保存先の設定はAPI serverと同じ値を使います。
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_PREVIEW_FFMPEG_PATH | ffmpeg | ffmpegのパス |
MMT_PREVIEW_FFPROBE_PATH | ffprobe | ffprobeのパス |
MMT_PREVIEW_POLL_INTERVAL_MS | 5000 | 処理するArtifactを探す間隔 |
MMT_PREVIEW_TOOL_TIMEOUT_MS | 1800000(30分) | ffmpeg・ffprobeの1回の上限。最大40分 |
MMT_PREVIEW_WORK_DIR | OSの一時ディレクトリ | 本体を一時的に置く場所。MMT_PREVIEW_MAX_SOURCE_BYTESの大きさが入る空きが要る |
MMT_PREVIEW_MAX_SOURCE_BYTES | 10737418240(10 GiB) | これより大きいArtifactはpreviewを作らない(skipped、source_too_large) |
worker
mado-tracking-workerの設定です。installで導入した場合は、~/.config/mado-tracking-worker/<worker-id>.envにまとめて書かれます。
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_API_URL | なし(必須) | API serverのURL。コンピュータからも届くURLにする |
MMT_API_TOKEN | なし(必須) | Service Accountのtoken |
MMT_API_TOKEN_FILE | なし | tokenを読むファイル(コンテナ用)。MMT_API_TOKENがあればそちらを使う |
MMT_WORKER_ID | なし(必須) | workerのID。再起動をまたいで同じ値にする |
MMT_WORKER_TARGET_IDS | なし(許可されたすべて) | 担当するコンピュータのID(カンマ区切り)。[接続に使うworker]で選ばれた接続確認は、これに関係なく受け取る |
MMT_WORKER_SSH_DIR | なし | ~/.sshに加えて、SSH鍵とknown_hostsの候補を探すディレクトリ。パスだけを報告する(SSH鍵の候補を報告する) |
MMT_WORKER_STATE_DIR | ~/.local/state/mado-tracking-worker/<IDのハッシュ> | 実行中のJobの記録を置くディレクトリ |
MMT_WORKER_MAX_OUTPUT_FILES | 10000 | 1つのJobで回収する出力ファイルの上限。1〜1000000 |
MMT_ALLOW_LOCAL_EXECUTOR | なし | trueでlocal executorを使う(開発用。API側の許可も要る) |
Docker composeで動かす場合は、MMT_WORKER_TOKEN_FILE、MMT_WORKER_SSH_DIR、MMT_WORKER_UID、MMT_WORKER_GID、MMT_WORKER_API_URLも使います(worker)。composeのMMT_WORKER_SSH_DIRは、コンテナの~/.sshへmountするホストのディレクトリです。
Python SDK
| 変数 | 既定 | 内容 |
|---|---|---|
MMT_API_URL | なし | API serverのURL |
MMT_API_TOKEN | なし | API token |
MMT_OFFLINE_DIR | ~/.local/share/mado-tracking/offline | オフライン記録を置くディレクトリ |
実行コードに渡される変数
workerはJobの実行コードに次の変数を渡します。実行コードはこれを読むだけで、自分で設定する必要はありません。
| 変数 | 内容 |
|---|---|
MMT_API_URL、MMT_API_TOKEN、MLFLOW_TRACKING_TOKEN | 接続先とJob限定token |
MMT_PROJECT_ID、MMT_EXPERIMENT_ID、MMT_RUN_ID、MMT_JOB_ID、MMT_JOB_KIND | 実行するRunのIDと種類 |
MMT_JOB_CONTEXT_FILE | Job、Run、パラメータ、モデルバージョン、入力データセットなどをまとめたJSON |
MMT_PARAMETERS_FILE、MMT_PARAMETERS_JSON | パラメータ |
MMT_MODEL_VERSION_FILE、MMT_MODEL_VERSION_ID | 使うモデルバージョン |
MMT_DATASET_VERSIONS_FILE、MMT_INPUT_DATASET_VERSION_IDS、MMT_INPUT_DATASET_DIRS | 入力データセットのバージョンと、本体を置いたディレクトリ |
MMT_UPSTREAM_RUN_ID、MMT_UPSTREAM_RUN_FILE | 上流のRun(あるときだけ) |
MMT_RESUME_CHECKPOINT_DIR、MMT_RESUME_STEP、MMT_RESUME_CHECKPOINT_FILE | 再開元のcheckpoint(再開するときだけ) |
MMT_OUTPUTS_DIR、MMT_RESULT_FILE | 出力のディレクトリとresult.jsonのパス |