最近業務でVertexAIを使おうかなと思ったのですが、vertextAIのカーネル環境にTensorflowなどはあったのですがMeCabが入った環境はなかったので、今日はVertex AI Workbenchのマネージドノートブックに、MeCab+NEologdを利用できるカーネルを追加する方法をまとめました。
Contents
Vertex AI の概要
Google Cloud Platform(GCP)のVertex AI Workbenchとして利用できる開発環境には、
Googleが管理するマネージドノートブック環境と、ユーザー管理のノートブック環境の2種類の
開発環境があります。
マネージドノートブック環境では、ノートブックを新規作成する際や既存のノートブックを開く際に、Python,PySpark,Pytorchなどの予め準備されたカーネルを指定することで、ノートブックの実行に必要なライブラリを利用することができます。
なぜカスタム環境が必要なのか
今回はカスタム環境を追加した背景としてはVertexAIには日本語の自然言語処理として重宝する「Mecab+NEoLogd辞書」が利用できるカーネルは用意されていないからです。
で、VertexAIのマネージド環境は環境構築時にインストールしたもの以外はあとからインストールしたりすることはできなくて、mecabをそのままインストールしようとするとエラーになります。
[ifs] no such file or directory: /opt/conda/lib/python3.7/site-packages/unidic/dicdir/mecabrc
そのため、環境構築時にMeCab+NEologdをインストールする必要があり、これを実現するためにはDockerのカスタムコンテナを追加する必要があります
Dockerのカスタムコンテナを追加
【全体手順】
- GCPの必要なAPIを有効化する。
- Mecab+NEoLogd辞書のインストール方法を明記したdockerfileを作成する。
- 作成したDockerfileからコンテナをビルドし、GCPのContainer Registryにpushする。
- 新規マネージドノートブックの作成時に、docker imageを指定する。
1.GCPの必要なAPIを有効化する。
まずは、必要なAPIである、Container RegistryおよびArtifact Registry API を有効にします。Container Registryは、これから作成するdocker imageを保存する場所です。
以下のURLにアクセスしてそれぞれのAPIを有効化します
・Container Registry API
https://console.cloud.google.com/apis/library/containerregistry.googleapis.com
・Artifact Registry API
https://console.cloud.google.com/apis/library/artifactregistry.googleapis.com
2.MeCab+NEoLogd辞書のインストールを明記したdockerfileを作成する。
つぎに、ベースイメージの選択とMeCab+NeoLogd辞書のインストール方法を明記したDockerfileを作成します。以下のコードを、Dockerfileという名前で拡張子なしのファイルとして作成しておきます。
<Dockerfile>
#base image from google cloud #https://cloud.google.com/deep-learning-containers/docs/choosing-container?hl=ja FROM gcr.io/deeplearning-platform-release/base-cpu:latest WORKDIR /root RUN apt-get -y update && \ apt-get -y upgrade && \ apt-get install -y mecab && \ apt-get install -y libmecab-dev && \ apt-get install -y mecab-ipadic-utf8 && \ apt-get install -y fonts-takao-gothic && \ apt-get install -y fonts-ipafont && \ apt-get install -y git && \ apt-get install -y make && \ apt-get install -y curl && \ apt-get install -y xz-utils && \ apt-get install -y file && \ apt-get install -y sudo RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git && \ cd mecab-ipadic-neologd && \ ./bin/install-mecab-ipadic-neologd -n -y && \ echo dicdir = `mecab-config --dicdir`"/mecab-ipadic-neologd">/etc/mecabrc && \ sudo cp /etc/mecabrc /usr/local/etc && \cd .. RUN echo "font.family : TakaoGothic" > ~/.config/matplotlib/matplotlibrc RUN pip install mecab-python3 RUN pip install mojimoji==0.0.12 RUN pip install neologdn==0.5.1 RUN pip install networkx==2.6 RUN pip install asari oseti pymlask RUN pip install wordcloud RUN pip install scikit-learn==0.23.0 RUN pip install Janome==0.3.7 RUN pip install japanize-matplotlib RUN pip install matplotlib==3.2
MeCab+NeoLogd辞書をインストールする手順は、Quiitaでまとめていらっしゃる方の記事を参照しました。最後に、pip intasll mecab-python3をはじめ自然言語処理の定番ライブラリもインストールするようにしています。特にjapanize-matplotlibはインストールしておかないとワードクラウドやグラフが文字化けするので重要ですね
関連記事:【Python】GoogleColab上でNetworkXによる日本語の共起ネットワークを文字化けせずにプロット
3.作成したDockerfileからコンテナをビルドし、GCPのContainer Registryにpushする。
DockerfileからのビルドとContainer Registryへのpushは、Cloud Shellを使う方法が一般的だと思います。分かる人は以下のドキュメントを読めばわかるかなと思うのですが、自分が試したところPUSH段階でハマったので諦めました
https://cloud.google.com/artifact-registry/docs/repositories/create-repos?hl=ja#apt
結局Jupyterからコマンドを叩いて設定するという方法を取りました(たぶん邪道っぽいので非推奨な気がします)
具体的な手順は以下になります。
- VertexAIで適当なインスタンスでJupyter notebook(ユーザー管理 or マネージド)を開く
- 適当なフォルダを作成し、そのフォルダに2で作成したDockerfileを配置する。
- フォルダ内で、jupyter notebookを新規作成する
- jupyter notebookのセルで、下記のコードを実行する
PROJECT_ID =!gcloud config list project --format "value(core.project)" PROJECT_ID = PROJECT_ID[0] !docker build . -f Dockerfile -t "gcr.io/{PROJECT_ID}/mecab-test:latest" !docker push "gcr.io/{PROJECT_ID}/mecab-test:latest"
最初の2行でPROJECT_IDを取得し、3行目でビルド、4行目でContainer Registryへのpushを行っています。”mecab-test”としている部分がこのコンテナの名前になるので、好きな名前を付けてください
ビルドの実行には時間がかかります。エラーなく無事pushまで終了すれば次に進みます。
またDockerfileを配置したフォルダには、他の余計なファイルは置かないでください。
ビルド実行時にそのファイルも読み込んでしまうので、余計な時間がかかってしまいます。
以下の例ではtest というフォルダに上記で作成したDockerfileとコマンドを実行するノートブックを配置しています。(セルを実行すると以下のようなログが出力されてビルドとpushが始まります)
4.新規マネージドノートブックの作成時に、docker imageを指定する。
Container Registryにdocker imageをpushできたら、新規マネージドノートブックの作成時に、詳細設定から[環境] セクションの [カスタム Docker イメージ] で、[カスタム Docker イメージを指定する] チェックボックスをオンにします。
その後、[選択] をクリックして、Container Registryから作成したdocker imageを指定してノートブックを作成すれば、カスタムカーネルが追加された環境が作成されます。
これでJupyterlabにカスタムコンテナが追加されているのでその環境を指定してNotebookを開くとmecabがインポートできています
参考記事:https://dev.classmethod.jp/articles/vertex-ai-workbench-custom-container/
コメント
[…] 関連記事:【GCP】VertexAIにMeCab+NEologdをインストールして使用できるようにする […]