BLOG

シンラボメンバーのあれこれ

  1. HOME
  2. ブログ
  3. 技術記事
  4. 5/15 代表勉強通信~【途中で失敗】PyCaret、Docker、Azure、デプロイ

5/15 代表勉強通信~【途中で失敗】PyCaret、Docker、Azure、デプロイ

こんにちは。代表の草場です。

PyCaretを使い倒そうの第三回です。今回はこちらの「Deploy Machine Learning Pipeline on the cloud using Docker Container」を取り上げます。前回取り上げた「Build and deploy your first machine learning web app」ではHerokuでデプロイでした。今回は、Microsoft Azure Web App Serviceを使って、機械学習パイプラインをWebアプリとしてデプロイする方法の解説です。以下の流れです。

Docker imageの作成→クラウド上でローカルにコンテナの作成→Azure Container Registry(ACR)にプッシュ→アプリのデプロイ

上記で出てくるDocker、コンテナに関して復習します。詳しくは様々な解説記事があるので勉強することをお勧めします。例えば、yu-crocoさんのQiita記事はいいかもです。
Pythonのコードが自分のコンピュータ上では動作するが、友人が全く同じコードを実行しようとすると動作しないという問題があると思います。これは、友人のPythonの環境と自分の環境が異なるためです。他のマシンに転送できる環境を作ることができれば、どこでも結果を再現することができます。これを実現するのがコンテナです。コンテナとは、アプリケーションとそのすべての依存関係をパッケージ化したソフトウェアの一種です。
では、
Dockerとは何か?Dockerは、ユーザーがコンテナを構築、実行、管理できるソフトウェア(Dockerとも呼ばれる)を提供している会社です。Dockerのことを細かく書き始めると数日に及ぶので今回はこの程度。

この記事では、Docker Desktop for Windowsを使用して、Azure Container Registryに公開するコンテナを作成します。そして、そのコンテナを使ってWebアプリをデプロイします。

やることは前回の記事と同じで、保険のデータを用いて、患者の人口統計学的情報と健康情報をウェブベースのフォームに入力し、予測された料金を出力するウェブアプリケーションを構築し、展開することです。作成するアプリも前回作ったアプリと同じですが、DockerとかAzureとか使っちゃおうということですね。

■機械学習パイプラインの構築
これは昨日の記事の通りです。PyCaretを使えば前処理簡単、モデルトレーニングも簡単。

■Webアプリの構築
こちらも昨日の記事の通り。取り上げている「Build and deploy your first machine learning web app」に細かく記載があります。困ったらPyCaret公式GitHubをフォーク。

■DockerコンテナでMLパイプラインをデプロイする10ステップ
さて、ここからが今回取り上げている記事の肝です。10ステップに分かれています。

ステップ1 Docker Desktop for Windowsのインストール
さて、まずはDocker Desktop for Windowsのインストールですが、、、インストールできない(Windowsのバージョンが、、)。

ということで、kuritaさんのこちらの記事を発見。Docker Toolkitをインストールすればいいらしいです。よかった。。。

ステップ2 Kitematicのインストール
Dockerコンテナを実行するための直感的なGUIです。Docker Toolkitインストールしたら一緒についてきました。

ステップ3 Dockerfileを作成する
さて、Dockerfileの作成です。Dockerfileは、命令のセットが入ったファイルです。参考記事のプロジェクトのDockerfileはこのPyCaret公式GitHub参考に。Dockerfileは大文字と小文字を区別し、他のプロジェクトファイルと一緒にプロジェクトフォルダにいれることが必須です。Dockerfileには拡張子がなく、任意のエディタを使って作成することができます。私はAtomを使って作成しました。とりあえずコピペ。

ステップ4 Azureコンテナレジストリの作成
Microsoft Azureにログイン。30日間の無料クレジット、ありがたい。リソースの作成をクリックします。

Container Registryで検索し、作成をクリック。

サブスクリプション、リソースグループ、およびレジストリ名を選択します(この例では、pycaret.azurecr.ioがレジストリ名です)。あれ?レポジトリが作成できない。アルファベットと数字のみだと??わからないので飛ばす。

ステップ5 Dockerイメージの構築
さて、Azureポータルでレジストリを作成したら、まずはコマンドラインを使ってDockerイメージを構築します。DockerファイルとDockerイメージ、違いはなんや?というのはこのyucatioさんの記事を参考ください。プロジェクトフォルダに移動し、コマンドプロンプトにて以下のコードを実行。
docker build -t pycaret.azurecr.io/pycaret-insurance:latest .
すると、
open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.

マジか。うーむ。Googleさんに聞いたら、このハギハラカズマサさんの記事発見。ほうほう、Docker Toolkitのインストール時に問題があったらしい。「Install VirtualBox with NDIS5 driver[default NDIS6]」にチェック入れるのが必須のようです。
よし、いったんDocker Toolkitアンインストールしてやり直し!!完璧!!のはずが、やはり同じメッセージ出ました。今回はくじけて終了。また明日。

関連記事