Google ResearchがNLPモデルの理解と可視化をするプラットフォームLanguage Interpretability Tool (LIT)をオープンソース化しました。試しに動かしてみたいと思います。
全3記事を予定しています。
1. Windows10環境でLanguage Interpretability Tool (LIT)を実行(1.環境構築編)【本記事】
2. Windows10環境でLanguage Interpretability Tool (LIT)を実行(2.機能確認編)
3. Windows10環境でLanguage Interpretability Tool (LIT)を実行(3.独自モデル編)
本記事では、Windows10 Home環境での環境構築手順について記載します。
目次
1. LITとは
Language Interpretability Tool (LIT)は、 NLPモデルの理解と可視化のためのツールです。
ブラウザベースのUIで、以下の機能が存在します。(論文抜粋)
詳細を知りたい方は以下をご参考ください。
こういうツール系は触ってみないと何とも言えない気がするので、試しに動かしてみることにしました。
2. Docker Desktop for Windowsのインストール
今回、Dockerを用いてサーバを立てるため、Windows10 Home環境にDocker Desktop for Windowsをインストールします。
2-1. Docker ID作成
※手順省略
いきなりですが、簡単なので手順を省略します。
以下のURLからDocker IDを作成してください。
https://hub.docker.com/
2-2. Windows 10 Homeのアップデート
Docker Desktop for Windowsをインストールしようとすると、私の環境では以下のエラーが発生しました。
Docker Desktop requires Windows 10 Pro/Enterprise (15063+) or Windows 10 Home (19018+).
※上記文言が画面上に表示されます。
インストール前にWindowsのアップデートが必要みたいです。
以下の手順を実行し、Windows 10 Homeのアップデートを行います。
Windowsスタートメニュー → 設定 → Windows Update からアップデートを実行
1時間ぐらい待っても終わらなかったですが、寝て起きたら終わってました。
2-3. Docker Desktop for Windows のインストール
実際にインストールをしていきます。
以下URLから**Download for Windows(stable)**をクリックし、インストーラーをダウンロードします。
https://www.docker.com/products/docker-desktop
インストーラーをダブルクリックし、手順を実行していくと、以下のエラーに遭遇しました。
何やらLinuxカーネルのアップデートをする必要があるみたいです。
指示通りにリンクをクリックします。
MSのマニュアルに飛ぶので、Linuxカーネル更新プログラムパッケージをダウンロードします。
ダウンロードしたwsl_update_x64.msiを実行します。
一瞬で終わります。
その後、手順に戻り、全ての手順を終わらせるとDocker Desktop for Windowsのインストールは終了です。
参考
似たようなエラーに当たった人の記事
https://tech.guitarrapc.com/entry/2020/04/21/034236
「Docker Toolbox」と「Docker Desktop for Windows」の違い
https://fumidzuki.com/knowledge/1033/
3. LITサンプルプログラムの実行
最終的には、サンプルプログラムquickstart_sst_demo.pyを実行することでDocker上にサーバを立て、
それをホスト側からブラウザで見に行くことになります。
LITのREADMEではcondaで環境を作っているため、
仮想環境の準備を行い、その後ホストからサーバにアクセスできるようにするための設定を行います。
3-1. WSL2のメモリ割り当て量の変更
仮想環境の準備に入る前に、WSL2のメモリ割り当て量の変更を行います。
これを実行しないと、デフォルトでPCのメモリの80%が割り当てられてしまい、私の場合だと16GBのPCなので約13GBもメモリを割り当ててしまう現象が発生してしまいました。
手順は簡単でホスト側の**%UserProfile%に.wslconfig**ファイルを作成し、メモリ割り当て量を指定します。
デモを動かすだけなら3GBで十分でした。
[wsl2]
memory=3GB
3-2. 仮想環境の準備
Anacondaが入ったDockerコンテナをpullし、立ち上げます。
コマンドラインから以下を実行します。
(コンテナ名のlit_envは任意変更可です。)
参考:https://hub.docker.com/r/continuumio/anaconda3
docker pull continuumio/anaconda3
docker run -it --name lit_env continuumio/anaconda3 /bin/bash
Dockerコンテナを立ち上げるとデフォルトの仮想環境名であるbaseがactivateされた状態となっています。
次に、必要なパッケージのインストール等を行います。
基本的にREADMEの手順に沿って進めますが、そのままだとエラーが発生するので少し変更しています。
参考:https://github.com/pair-code/lit/issues
参考:https://github.com/yarnpkg/yarn/issues/7329
※rootユーザのまま実行するのもどうなんだろうと思いつつも、結局rootのまま実行しました。。
git clone https://github.com/PAIR-code/lit.git ~/lit
# Set up Python environment
cd ~/lit
conda env create -f environment.yml
conda activate lit-nlp
conda install cudnn cupti # optional, for GPU support
conda install -c pytorch pytorch # optional, for PyTorch
# Build the frontend
cd ~/lit/lit_nlp/client
###### yarnがないのでインストールします
# 単純に"apt-get install yarn" だと後続でエラーが発生するので以下を実行
curl https://deb.nodesource.com/setup_12.x | bash
curl https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update && apt-get install -y nodejs yarn postgresql-client
######
yarn && yarn build
パッケージのインストール等が完了し、仮想環境の準備が終わりました。
3-3. ホストからサーバにアクセスするための設定変更
あとは基本的にサンプルプログラムを叩くだけなのですが、
サンプルのままではDockerコンテナのlocalhost上にLISTENするサーバを立ち上げてしまい、
ホストからアクセスできないので、0.0.0.0にサーバを立てるようにサンプルプログラムを書き換えます。
まず、vimをインストールします。
apt-get install vim
以下のコマンドを実行しserver_flags.pyファイルを開きます。
(必要に応じて編集前にバックアップを取得してください。)
vi /root/lit/lit_nlp/server_flags.py
以下の部分を書き換え、保存します。
# flags.DEFINE_string('host', '127.0.0.1', 'What host address to serve on.')
flags.DEFINE_string('host', '0.0.0.0', 'What host address to serve on.')
後々ポートフォワードオプションを入れてdocker runコマンドを打つので、コンテナをイメージとして保存します。
まずはexitします。
exit
docker commitコマンドを実行し、lit_envという名前のコンテナをイメージとして保存します。
(lit_env_imgという名前で保存していますが、名前はもちろん任意です。)
docker commit lit_env lit_env_img
3-4. サンプルプログラムの実行
LITのREADME通りに実行すると、後々サーバを**--port5432で立ち上げることになります。
なので、コンテナ側のポートを5432に指定したポートフォワードオプションをつけてdocker run**コマンドを実行します。
(ホスト側のポート番号はもちろん任意です。)
docker run -it -p 5432:5432 lit_env_img /bin/bash
サンプルプログラムである感情分類タスクのデモを実行します。
何やら3epochぐらいfine tuningしているようです。
conda activate lit-nlp
cd ~/lit
python -m lit_nlp.examples.quickstart_sst_demo --port=5432
以下のメッセージが出力されたら完了です。
Starting Server on port 5432
You can navigate to 0.0.0.0:5432
ホスト側のブラウザから以下のURLにアクセスします。
http://127.0.0.1:5432/
以上でWindows10 Home環境下での環境構築手順は終了です。
4. 最後に
今回エラーを回避するために色々設定を変えました。
LITのIssueを見てもらうとわかると思いますが、
その内容も含めてここ1週間で結構やりとりが行われているため、
近いうちにアップデートがあるかもしれません。
そうなったらもっと楽に環境構築できると思います。
次回はLITの機能を色々見ていきたいと思います!