0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Databricks Free EditionでUnity Catalogモデルレジストリがエラーになる場合の対処法

Posted at

問題の概要

Databricks Free Editionでmlflow.register_model()を使用してUnity Catalogにモデルを登録しようとすると、以下のようなS3 AccessDeniedエラーが発生する場合があります。

RestException: RESOURCE_DOES_NOT_EXIST: 
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

エラーはモデルのアーティファクト(requirements.txt、MLmodel、model.pkl等)をUnity Catalogのストレージにアップロードする際に発生します。

Screenshot 2026-01-07 at 9.47.34.png

原因

サーバレスコンピュートのバージョンによって、プリインストールされているMLflowのバージョンが異なります。

サーバレスバージョン MLflowバージョン UC Model Registry
v2 2.11.4 ❌ エラー
v4 2.22.0 ✅ 動作

古いバージョンのMLflow(2.11.x系)では、Free Editionの権限設定でモデルアーティファクトのアップロードに失敗します。MLflowをアップグレードすることで解決します。

解決策

方法1: サーバレスv4を使用する(推奨)

ノートブックの接続先をサーバレスv4に変更します。

  1. ノートブック右の環境設定をクリック
  2. サーバレスv4を選択
    Screenshot 2026-01-07 at 9.44.10.png
  3. 適用をクリック
    Screenshot 2026-01-07 at 9.44.29.png

これによりMLflow 2.22.0が使用され、問題なくモデル登録できます。

Screenshot 2026-01-07 at 9.48.17.png

方法2: MLflowをアップグレードする

サーバレスv2を使用する場合は、ノートブックの先頭でMLflowをアップグレードします。

%pip install --upgrade mlflow -q
dbutils.library.restartPython()

注意: restartPython()を実行すると、それまでに定義した変数やインポートがリセットされます。このため、これらのセルはノートブックの最初に配置してください。

確認方法

現在のMLflowバージョンは以下で確認できます。

import mlflow
print(mlflow.__version__)

2.20.0以上であれば、Unity Catalogへのモデル登録が正常に動作します。

最小再現コード

問題を再現するための最小コードです。

import mlflow
import mlflow.sklearn
from mlflow.models import infer_signature
from sklearn.datasets import load_wine
from sklearn.linear_model import LogisticRegression

# 設定
mlflow.set_registry_uri("databricks-uc")
username = spark.sql("SELECT current_user()").collect()[0][0]
clean_username = username.split("@")[0].replace(".", "_")
CATALOG = f"test_{clean_username}"
MODEL_NAME = f"{CATALOG}.ml.test_model"

# カタログ作成
spark.sql(f"CREATE CATALOG IF NOT EXISTS {CATALOG}")
spark.sql(f"CREATE SCHEMA IF NOT EXISTS {CATALOG}.ml")

# モデル学習
wine = load_wine()
X, y = wine.data[:, :4], (wine.target == 0).astype(int)
model = LogisticRegression().fit(X, y)

# MLflowでログ
with mlflow.start_run() as run:
    sig = infer_signature(X, model.predict(X))
    mlflow.sklearn.log_model(model, "model", signature=sig, input_example=X[:2])

# ここでエラーが発生(MLflow 2.11.x の場合)
mlflow.register_model(f"runs:/{run.info.run_id}/model", MODEL_NAME)

まとめ

  • Free EditionでUCモデルレジストリを使う場合は、MLflow 2.20以上が必要
  • サーバレスv4を使うか、%pip install --upgrade mlflowでアップグレード
  • この問題はFree Edition固有であり、有償環境では発生しない

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?