保存先の設定
![]()
Artifactの保存先は、全体管理者が「全体管理」→[ストレージ]でまとめて管理します。種類はファイルシステム(Filesystem)とS3互換ストレージ(S3)の2つです。S3はAWSのほか、MinIOなどのS3互換ストレージや、Signature Version 4に対応していない古いストレージ(署名v2)にも接続できます。
Projectごとに、どの保存先を使うかを選びます。保存先を切り替えても、既存のArtifactは保存したときの保存先から読み続けます。
こんなときに向いています
- 学習の重みや音声データを、社内のS3互換ストレージに置きたい
- 用途ごとにbucketやprefixを分け、Projectごとに保存先を選びたい
- Signature Version 2しか受け付けない古いストレージを使い続けたい
- 自己署名の証明書を使うストレージへ、CA証明書を指定して接続したい
保存先の種類
| 種類 | 保存する場所 | 設定する場所 |
|---|---|---|
| Filesystem | API serverのディレクトリ | 環境変数ARTIFACT_FILESYSTEM_ROOT、または画面 |
| S3 | S3互換ストレージのbucket | 環境変数S3_*、または画面 |
保存先は名前で区別します。名前は小文字の英数字とハイフンで、63文字までです。あとから変更できません。
環境変数で設定した保存先は、filesystem(常に存在)とs3(S3_BUCKETを設定したとき)という名前で一覧に表示されます。[定義元]が「環境変数」の行は画面から変更できません。変更する場合は.envを書き換えてAPIを再起動します。環境変数の一覧は環境変数を参照してください。
保存先を追加する
S3互換ストレージを追加する手順です。
- 右上のユーザーメニューの[全体設定]を開き、サイドバーの「全体管理」で[ストレージ]を開きます
- [保存先を追加]を押します
- [種類]で「S3」を選び、次の値を入力します。署名・TLS証明書・CA証明書・Checksum・Multipartは、[詳細設定(署名・TLS・Checksum・Multipart)]を開くと出ます。多くの保存先では既定のままで構いません
- [作成]を押します。保存するとすぐに接続テストを行い、結果を一覧の下に表示します(接続テスト)
| 項目 | 入力する値 | 例 |
|---|---|---|
| 名前 | 小文字の英数字とハイフン | lab-minio |
| Endpoint URL(AWSなら空欄) | http://またはhttps://で始まるURL。認証情報やクエリを含めません | https://minio.example.internal:9000 |
| Region | AWSのリージョン。S3互換ストレージでは既定のままで構いません | us-east-1 |
| Bucket | bucket名 | mmt-artifacts |
| Prefix(任意) | bucket内のフォルダ。前後の/は取り除かれます | tracking |
| path-styleでアクセスする | MinIOなど、bucket名をホスト名に含められないストレージではオンにします | オン |
| 署名 | 「Signature Version 4」(既定)か「Signature Version 2」 | Signature Version 4 |
| TLS証明書を検証する | 既定でオンです。オフにするのは検証用の環境だけにします | オン |
| CA証明書(PEM、任意) | 社内CAで署名した証明書を使うときに、PEM形式のCA証明書を貼り付けます | |
| Checksumの扱い | 「必要なときだけ(WHEN_REQUIRED)」(既定)か「対応していれば常に(WHEN_SUPPORTED)」 | 必要なときだけ |
| Multipart uploadを使う | 既定でオンです | オン |
| Multipartのpartサイズ(MiB) | 大きなファイルを分けて送るときの1つの大きさ。5〜512 MiB | 8 |
| Access key ID(任意) | ストレージのアクセスキー | |
| Secret access key | ストレージのシークレットキー | |
| 有効 | 新しいArtifactをこの保存先に保存できるようにします | オン |
ファイルシステムの保存先を追加するときは、[種類]で「Filesystem」を選び、[ルートディレクトリ]にAPI serverの絶対パス(例: /srv/mmt/artifacts)を入力します。..を含むパスは使えません。API serverを複数台で動かす場合は、全台から同じディレクトリが見える永続ボリュームを指定します。
Docker Composeで動かしている場合、API serverはコンテナの中で動くので、ホストのディレクトリはそのままでは見えません。.envのMMT_FILESYSTEM_STORAGE_DIRにホストのディレクトリを指定し、COMPOSE_FILEにcompose.filesystem-storage.ymlを足すと、コンテナの中にも同じパスで見えるようになります。[ルートディレクトリ]にはその下のパスを指定します。手順はインストールを参照してください。
ルートディレクトリの候補
[ルートディレクトリ]に入力すると、API serverにあるディレクトリが候補に出ます。
- 空欄のまま選ぶと、
/の直下のディレクトリが出ます。/proc、/sys、/dev、/boot、/etc、/usr、/tmpなどOSのディレクトリは、/の直下では候補に出しません(パスを全部入力すれば使えます)。データ用のディスク(/srv、/mnt、/homeなど)の下を指定します /で終えると、そのディレクトリの中のディレクトリが出ます(例:/srv/mmt/)- 途中まで入力すると、その名前で始まるディレクトリが出ます(例:
/srv/mmt/art) .で始まるディレクトリは、.を入力したときだけ出ます- ↑↓で選び、EnterかTabで入力します。Escを押すと候補だけが閉じます
- 候補は50件までです。多いときは「候補が多いため一部だけを表示しています。」と出るので、続けて入力して絞り込みます
入力したパスがまだ無いときは「(パス) はサーバにまだありません。接続テストか最初の保存のときに作成します。」、ファイルを指しているときは「(パス) はディレクトリではありません。別のパスを指定してください。」と表示されます。
候補は、APIのプロセスから見えるディレクトリです。APIをコンテナで動かしている場合は、コンテナの中のパスになります。読めないディレクトリは候補に出ません。
追加した保存先は一覧に「画面」として表示されます。種類は保存後に変更できません。
認証情報の扱い
Secret access keyはAPIのデータベースに暗号化して保存し、画面やAPIの応答には返しません。設定済みの場合、入力欄には「設定済み(空欄のままなら変更しません)」と表示されます。CA証明書も同じです。Access key IDとSecret access keyは両方を指定するか、両方を空欄にします。両方を空欄にすると、API serverの環境(環境変数、インスタンスのロールなど)にある認証情報を使います。
シークレットを保存するには、APIの.envに暗号化の鍵MMT_STORAGE_SECRET_KEYを設定しておく必要があります。設定されていないと、シークレット付きの保存先を保存できません。鍵はターミナルで次のコマンドを実行して作ります。
openssl rand -base64 32出力された値を.envのMMT_STORAGE_SECRET_KEY=の後ろに書き、APIを再起動します。preview workerを動かしている場合は、同じ値をpreview workerにも設定します。
WARNING
MMT_STORAGE_SECRET_KEYを変えると、保存済みのシークレットを復号できなくなります。その保存先のArtifactは読めなくなり、APIの起動時のログにstorage_backend_unavailableが出ます。鍵を変えた場合は、各保存先の[変更]からSecret access keyを入力し直してください。
署名v2を使う
AWS SDKはSignature Version 4しか扱えないため、mado ML TrackingはSignature Version 2の署名を独自に実装しています。v4を受け付けないストレージのときだけ「Signature Version 2」を選びます。
- [Checksumの扱い]は表示されず、「必要なときだけ(WHEN_REQUIRED)」で送ります
- Regionは署名に使いません
- 接続テストとmultipart uploadは、v4と同じように使えます
multipartが動かないストレージ
multipart uploadのAPIに対応していないS3互換ストレージでは、[Multipart uploadを使う]をオフにします。この場合は次の制限があります。
- 1件のArtifactは5 GiBまでです
- APIはファイルを一時ディレクトリに書いてから送るため、API serverの一時ディレクトリにも同じ容量が必要です
- 大きなファイルのアップロードで説明する再開可能なアップロードと、MLflowのmultipart uploadは使えません
接続テスト
保存先を追加・変更すると、保存の直後に接続テストを行います。あとから確かめるときは次の手順です。
- 一覧の行の[接続テスト]を押します
- 「接続テストの結果」に、段階ごとの結果が「OK」か「NG」で表示されます
失敗したときは、結果の下の[設定を変更]から保存先の設定を直し、もう一度[接続テスト]を押します(環境変数で定義した保存先は、画面からは変えられません)。「保存されたsecretを現在の鍵で読めません」は、API serverのMMT_STORAGE_SECRET_KEYが保存したときから変わっていないか確かめるか、[変更]でSecret access keyを入れ直します。
接続テストは、保存先のmmt-connection-test/<ランダムなID>/に64バイトのファイルを書き、次の順に確かめます。
| 段階 | 確かめる内容 |
|---|---|
| 書き込み | ファイルを保存できるか |
| 読み出し | 保存したファイル全体を読めるか |
| 範囲指定の読み出し | Rangeを指定して一部だけ読めるか(音声・動画のシークに使います) |
| 削除 | ファイルを削除でき、削除後に読めなくなるか |
すべて「OK」なら「すべての段階が成功しました」と表示されます。失敗した段階には、エラーの名前とHTTPステータスだけが表示されます。シークレットや署名の値は表示されません。失敗した段階より後の段階は実行されず「NG」になります。書き込みが成功していれば、削除は必ず試みます。
無効にした保存先や、環境変数で設定した保存先もテストできます。
S3では、ストレージ側で対象のprefixにPut、Get、Deleteと、multipart uploadの作成・完了・中断を許可しておきます。中断されたmultipart uploadが残らないよう、bucketにはAbortIncompleteMultipartUploadのライフサイクルルールを設定してください。
既定の保存先
既定の保存先は、新しいProjectを作るときに最初から選ばれる保存先です。
- 一覧で、既定にする保存先の[既定にする]を押します
- 確認ダイアログ「既定の保存先を変更」で[既定にする]を押します。押すとその場で接続テストを行い、失敗したときは既定にしません(結果は一覧の下に出ます)
既定の保存先には「既定の保存先」と表示されます。既定を変えても、既存のProjectの保存先は変わりません。既定を設定していない場合はfilesystemが既定になります。
Projectの保存先を選ぶ
Projectの保存先は、Projectを作るダイアログの[Artifact保存先]で選びます。作成後に変えるときは、[プロジェクト設定]の「プロジェクト」で選び直して保存します。変更できるのはProject adminだけです。
保存先を変えると、それ以降に保存するArtifactだけが新しい保存先に入ります。既存のArtifactは移動せず、保存したときの保存先から読み続けます。
保存先を無効にする
使わなくなった保存先は、[変更]で[有効(無効にしても既存のArtifactは読めます)]をオフにします。
- 既存のArtifactは引き続き読めます
- 新しいArtifactの保存と、新しいアップロードの開始は拒否されます。開始済みのアップロードは最後まで送れます
- Projectの保存先の選択肢から外れます
既定の保存先は無効にできません。先に別の保存先を既定にしてください。
既存のArtifactとの関係
Artifactは、保存したときの保存先の名前を記録しています。そのため、Artifactが1件でも残っている保存先では、種類、Bucket、Endpoint URL、Prefix、ルートディレクトリを変更できません。変更すると既存のArtifactが読めなくなるためです。保存場所を変えたいときは、新しい名前で保存先を追加し、Projectの保存先を切り替えます。
元の保存先は、そこにArtifactが残っている間は読める状態にしておいてください。データベースとArtifactの保存先は、同じ時点でバックアップします。データベースだけを戻しても、重みや音声のファイルは戻りません。
設定の変更は、変更を受け付けたAPIのプロセスにすぐ反映されます。APIを複数のプロセスで動かしている場合、有効・無効やpartサイズの変更を全プロセスへ確実に反映するには、APIを再起動します。