Skip to content

保存先の設定 ​

全体管理のストレージ画面

Artifactの保存先は、全体管理者が「全体管理」→[ストレージ]でまとめて管理します。種類はファイルシステム(Filesystem)とS3互換ストレージ(S3)の2つです。S3はAWSのほか、MinIOなどのS3互換ストレージや、Signature Version 4に対応していない古いストレージ(署名v2)にも接続できます。

Projectごとに、どの保存先を使うかを選びます。保存先を切り替えても、既存のArtifactは保存したときの保存先から読み続けます。

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

  • 学習の重みや音声データを、社内のS3互換ストレージに置きたい
  • 用途ごとにbucketやprefixを分け、Projectごとに保存先を選びたい
  • Signature Version 2しか受け付けない古いストレージを使い続けたい
  • 自己署名の証明書を使うストレージへ、CA証明書を指定して接続したい

保存先の種類 ​

種類保存する場所設定する場所
FilesystemAPI serverのディレクトリ環境変数ARTIFACT_FILESYSTEM_ROOT、または画面
S3S3互換ストレージのbucket環境変数S3_*、または画面

保存先は名前で区別します。名前は小文字の英数字とハイフンで、63文字までです。あとから変更できません。

環境変数で設定した保存先は、filesystem(常に存在)とs3(S3_BUCKETを設定したとき)という名前で一覧に表示されます。[定義元]が「環境変数」の行は画面から変更できません。変更する場合は.envを書き換えてAPIを再起動します。環境変数の一覧は環境変数を参照してください。

保存先を追加する ​

S3互換ストレージを追加する手順です。

  1. 右上のユーザーメニューの[全体設定]を開き、サイドバーの「全体管理」で[ストレージ]を開きます
  2. [保存先を追加]を押します
  3. [種類]で「S3」を選び、次の値を入力します。署名・TLS証明書・CA証明書・Checksum・Multipartは、[詳細設定(署名・TLS・Checksum・Multipart)]を開くと出ます。多くの保存先では既定のままで構いません
  4. [作成]を押します。保存するとすぐに接続テストを行い、結果を一覧の下に表示します(接続テスト)
項目入力する値例
名前小文字の英数字とハイフンlab-minio
Endpoint URL(AWSなら空欄)http://またはhttps://で始まるURL。認証情報やクエリを含めませんhttps://minio.example.internal:9000
RegionAWSのリージョン。S3互換ストレージでは既定のままで構いませんus-east-1
Bucketbucket名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 MiB8
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を設定しておく必要があります。設定されていないと、シークレット付きの保存先を保存できません。鍵はターミナルで次のコマンドを実行して作ります。

sh
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は使えません

接続テスト ​

保存先を追加・変更すると、保存の直後に接続テストを行います。あとから確かめるときは次の手順です。

  1. 一覧の行の[接続テスト]を押します
  2. 「接続テストの結果」に、段階ごとの結果が「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を作るときに最初から選ばれる保存先です。

  1. 一覧で、既定にする保存先の[既定にする]を押します
  2. 確認ダイアログ「既定の保存先を変更」で[既定にする]を押します。押すとその場で接続テストを行い、失敗したときは既定にしません(結果は一覧の下に出ます)

既定の保存先には「既定の保存先」と表示されます。既定を変えても、既存の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を再起動します。

関連するページ ​