1
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?

More than 1 year has passed since last update.

DatabricksのShared ComputeだとMLランタイムが使えない問題

Last updated at Posted at 2023-09-13

Unity Catalogに対応したクラスターに制限がある

Unity Catalogを使用したDatabricks環境だと、Unity Catalogにアクセスできるセキュリティモードが

  • シングルユーザー
  • ユーザー分離共有

に限定される。シングルユーザーの場合は制約はそれほどないので特に問題はない。ユーザー分離共有の場合となると、DatabricksのMLランタイムがそもそも選択できない。とは言えMLランタイムでなくとも、mlflowはpip installすれば使えるし、分散処理しないのであればsklearnやlightgbmもpip installで使えば良い。
問題はSparkMLを使いたい場合だ。シングルユーザーのクラスターは問題なくSparkMLを使えるが、ユーザー分離共有のクラスターはそもそもMLランタイムを選択できない。その状況下で無理やりSparkMLを使うとどうなるだろうか?

SparkML自体はsparkのライブラリに内包されているので、import自体は可能。しかし、いざインスタンス化しようとするとエラーになる。
image.png

エラーログを見るとConstructor public org.apache.spark.ml.regression.LinearRegression(java.lang.String) is not whitelisted.と書いてある。これはPy4JSecurityが影響している模様。
共有モードのクラスターだとspark.databricks.pyspark.enablePy4JSecuritytrueになり、spark.jvm.class.allowlistに追加されていない一部のクラスが使えなくなるようだ(共有モードでMLランタイムが選択できないのも、恐らくこれが理由)。
じゃあこの設定を無効化するか、spark.jvm.class.allowlistにホワイトリスト登録すればいいじゃん、と思ったがこれは不可能。

この影響で、Unity CatalogにアクセスしてSparkMLを使った機械学習の並列分散処理を行うためには、「シングルユーザー」のクラスターを使う以外に選択肢がない。

さらに厄介なのはpyspark pandas APIを使っていると、一部のメソッドの内部でsparkMLのクラスを参照してエラーになる場合がある(pyspark pandas APIのdf.corr()でエラーになった)。
image.png

クラスターの作成権限を制限している組織は多そうなので、Unity Catalogに移行すると機械学習の並列分散処理が実質的にできなくなるケースもありそう。なのでSparkMLを使っている組織は、Unity Catalogへの移行は検討事項が増えるので注意が必要。

1
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
1
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?