Databricksワークスペース間における機械学習モデルの共有(実践編)

[Databricksワークスペース間における機械学習モデルの共有](https://qiita.com/taka_yayoi/items/ddddbf9637fe03607b4f)で紹介されている、ワークスペース間でのモデル共有の手順を実際にトライした内容となっています。

集中管理されるモデルレジストリ用のワークスペースを構築することで、開発ワークスペース、本格運用ワークスペースなどで機械学習モデルを共有することが可能となります。

本書では以下の2つのワークスペースを使用します。

1. ローカルワークスペース: モデル開発を行うワークスペースとなります。
    - URLは`https://local-tydb-test-environment.cloud.databricks.com/`であるとします。
1. モデルレジストリワークスペース: モデルを集中管理するためのワークスペースです。
    - URLは`https://model-registry-tydb-test-environment.cloud.databricks.com/`であるとします。

![Screen Shot 2022-01-17 at 13.05.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b8edd0e1-9463-20a0-5354-649fb4bd07f5.png)

実際に運用を行う際には、これ以外にもテスト用のワークスペース、モデルを本格運用するためのワークスペースなどを要件に応じて構築することになります。

# モデルレジストリワークスペースでアクセストークンを作成

API経由でワークスペースを操作するため、アクセスに必要となるパーソナルアクセストークンを作成します。

> **注意**
パーソナルアクセストークンは厳重に管理してください。ノートブックに直接記述するのではなく、[シークレット](https://qiita.com/taka_yayoi/items/338ef0c5394fe4eb87c0)に保管することを強くお勧めします。

**Settings > User Settings > Access Tokens > Generate New Token**を選択し、トークン名、有効日数を指定して**Generate**をクリックします。表示されるトークンをメモしておきます。
![Screen Shot 2022-01-17 at 11.32.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b903016c-a55e-fdab-3b83-04b34f7c6348.png)

# ローカルのワークスペースでパーソナルアクセストークンを作成

次のステップで必要となるので、上の手順に従いローカルワークスペースでもパーソナルアクセストークンを生成してメモしておきます。

# ローカルのワークスペースでシークレットを作成

ここでは、[Databricks CLI](https://docs.databricks.com/dev-tools/cli/index.html)(コマンドラインインタフェース)を用いてシークレットを作成します。

CLIをインストールしていない場合には、ローカルマシンにインストールの上、トークンの設定を行なってください。ここでは、ローカルワークスペースのパーソナルアクセストークンが必要となります。

```bash:bash
databricks configure --token
```

上記を実行すると、ホスト名とトークンを聞かれるのでホスト名には`https://local-tydb-test-environment.cloud.databricks.com/`、トークンはローカルワークスペースで生成したパーソナルアクセストークンを設定します。これによって、ローカルワークスペースにアクセスして各種操作を行えるようになります。

## シークレットのスコープの定義

Databricksのシークレットは「スコープ」というある種のグループで管理します。ここではスコープ名は`model-share`とします。

```bash:bash
databricks secrets create-scope --scope model-share
```

## シークレットの作成：リモートレジストリのホスト名

以降の3つの設定では、ワークスペースを識別できるようにスコープ名にプレフィクスを追加します。ここでは、モデルレジストリワークスペースに対するプレフィクスを`remote-registry`とします。複数のワークスペースを取り扱う際には、一意となるプレフィクスを適宜つけてください。

```bash:bash
databricks secrets put --scope model-share --key remote-registry-host
```

上を実行するとエディタが開きますので、今回の例では`https://model-registry-tydb-test-environment.cloud.databricks.com/`を入力して保存・終了します。

## シークレットの作成：リモートレジストリのトークン

```bash:bash
databricks secrets put --scope model-share --key remote-registry-token
```

上を実行するとエディタが開きますので、[モデルレジストリワークスペースでアクセストークンを作成](#モデルレジストリワークスペースでアクセストークンを作成)で作成したパーソナルアクセストークンを入力して保存・終了します。

## シークレットの作成：リモートレジストリのワークスペースID

```bash:bash
databricks secrets put --scope model-share --key remote-registry-workspace-id
```

ワークスペースIDは、[こちら](https://docs.databricks.com/workspace/workspace-details.html)で説明されているようにブラウザから対象のワークスペースにアクセスした際にURLに含まれています。`https://<databricksワークスペースのホスト名>/?o=6280049833385130`となっている場合、ワークスペースIDは`o=`以降の`6280049833385130`となります。

上を実行するとエディタが開きますので、モデルレジストリワークスペースのワークスペースIDを入力して保存・終了します。

# サンプルノートブック

https://github.com/taka-yayoi/public_repo/tree/main/model_sharing

1. 上のノートブックをローカルワークスペースにインポートします。
1. [MLランタイム](https://qiita.com/taka_yayoi/items/824b507019d3ade7eedc)が動作するクラスターにノートブックをアタッチします。
1. ノートブック上部にウィジェットが表示されているので、*1_registry_secret_scope*には、シークレットのスコープ名`model-share`、`2_registry_secret_key_prefix`には、モデルレジストリワークスペースのプレフィクス`remote-registry`を入力し、以降のセルを実行していきます。

これだけで、ワークスペース間での機械学習モデルの共有が可能となります。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)