💬

[Vertex AI Workbench]マネージドノートブック環境で、MeCab+NEologdを利用できるようにする。

2022/07/22に公開

furuhonです。
今回は、Vertex AI Workbenchのマネージドノートブックに、
MeCab+NEologdを利用できるカーネルを追加する方法をまとめました。

概要

Google Cloud Platform(GCP)のVertex AI Workbenchとして利用できる開発環境には、
Googleが管理するマネージドノートブック環境と、ユーザー管理のノートブック環境の2種類の
開発環境があります。

マネージドノートブック環境では、ノートブックを新規作成する際や既存のノートブックを開く際に、Python,PySpark,Pytorchなどの予め準備されたカーネルを指定することで、ノートブックの実行に必要なライブラリを利用することができます。

しかし、日本語の自然言語処理として重宝する「Mecab+NEoLogd辞書」が利用できるカーネルは
用意されていないようです。そこで、マネージドノートブックで自然言語処理を行うために、「Mecab+NEoLogd辞書」を利用できるカスタムカーネルを追加する方法を調べました。

【全体手順】

  1. GCPの必要なAPIを有効化する。
  2. Mecab+NEoLogd辞書のインストール方法を明記したdockerfileを作成する。
  3. 作成したDockerfileからコンテナをビルドし、GCPのContainer Registryにpushする。
  4. 新規マネージドノートブックの作成時に、docker imageを指定する。

下記のGCPの公式ドキュメントを参考に試行錯誤した結果となります。
https://cloud.google.com/vertex-ai/docs/workbench/managed/custom-container

勉強中の自分には何を書いているか怪しい部分もあるので、
コメント等でご指導いただけると助かります!

1.GCPの必要なAPIを有効化する。

まずは、必要なAPIである、Notebooks, Container RegistryおよびArtifact Registry API を有効にします。Notebooksは、マネージドノートブックを利用したことがあればすでに有効化していると思います。Container Registryは、これから作成するdocker imageを保存する場所です。
以下のgoogle公式ドキュメントの、「4.Notebooks, Container Registry, and Artifact Registry API を有効にします。」で有効化するか、直接GCPで同サービスを検索して、APIを有効化します。
https://cloud.google.com/vertex-ai/docs/workbench/managed/custom-container#before_you_begin

2.MeCab+NEoLogd辞書のインストール方法を明記したdockerfileを作成する。

つぎに、ベースイメージの選択とMeCab+NeoLogd辞書のインストール方法を明記した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 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 pip install mecab-python3

最初にFROMで選択するベースイメージは、GCPが用意しているイメージの中から選びます。
今回はCPUのみの一番ベーシックなイメージを選択しました。
https://cloud.google.com/deep-learning-containers/docs/choosing-container?hl=ja

MeCab+NeoLogd辞書をインストールする手順は、Quiitaでまとめていらっしゃる方の記事を参照しました。最後に、pip intasll mecab-python3をつけて、ライブラリのMeCabもインストールするようにしています。
https://qiita.com/Takayoshi_Makabe/items/18cefa4b4572d12b5aa9

3.作成したDockerfileからコンテナをビルドし、GCPのContainer Registryにpushする。

DockerfileからのビルドとContainer Registryへのpushは、Cloud Shellを使う方法が一般的だと思います。ただ、私はCloud Shellに慣れておらず苦手意識があります。
ちょうどVertex aiで別のノートブック環境をテストしていたので、Jupyter ノートブック上でpushまでを実行する手順を紹介します。

  1. Jupyter notebook(ユーザー管理 or マネージド)を開く
  2. 適当なフォルダを作成し、そのフォルダに2で作成したDockerfileを配置する。
  3. フォルダ内で、jupyter notebookを新規作成する。
  4. 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"としている部分がこのコンテナの名前になるので、お好きな名前を付けましょう。

4.新規マネージドノートブックの作成時に、docker imageを指定する。

Container Registryにdocker imageをpushできたら、新規マネージドノートブックの作成時に、詳細設定から[環境] セクションの [カスタム Docker イメージ] で、[カスタム Docker イメージを指定する] チェックボックスをオンにします。
その後、[選択] をクリックして、Container Registryから作成したdocker imageを指定してノートブックを作成すれば、カスタムカーネルが追加された環境が作成されます。

しばらく待っていると、カスタムカーネルが追加されます。

追加されたカスタムカーネルを使って、MeCabを動かすことができました!

結論

Google公式ドキュメントや、他の方の記事を参考にして、
何とかマネージドノートブックに自作カーネルを追加することができました!
応用すれば、poetryで指定したライブラリを全部インストールしておいたカーネルも追加できますね。

Discussion