miniconda

(以下は2021年5月6日時点の情報です.ライセンス条件は変更になる可能性があります.)

Anaconda が商用利用とならない範囲で Anaconda 環境がどれぐらい使えるのかを確認してみた.

なお,Anaconda3が既に導入されているWindowsに,minicondaをデフォルトのディレクトリ(Anaconda3と同じディレクトリ)に2回インストールするとAnaconda3のインストールも消えてしまうので注意.

AnacondaはPythonとそのライブラリ一式がパッケージ化されたものです.Pythonをインストールして,pipなどでライブラリを個別にインストールしても良いのですが,ライブラリの依存関係などが複雑な場合,インストールにかなり手間取ることがあります.Anacondaを使っておけば,このようなライブラリのバージョンの競合などを避けることができます(多少は発生します).

また,AnacondaというよりCondaを使うと,Pythonの環境が自由に切り替えられて便利です.特にPytorchなどを使って最近の深層学習モデルを動かすときには,そのモデル専用の環境を作らないと動いてくれなないことが多々あります.最近はモデルがAllen Institute のAllenAI, AllenNLPなどの強力なライブラリに依存していたりして,そちらの環境にも合わせてあげる必要があります.そのため,最新の深層学習モデルを研究していると,研究テーマごとにPythonの環境を作り(conda create -n 環境名),切り替え(conda activate 環境名)ながら実験していくことになります.このあたりのcondaの使い方は丁寧に紹介しているサイトがたくさんあるのでここでは説明しません.

大学等の教育機関ではAnacondaを無償で利用できるため,学生・教員はAnacondaのライセンスを気にする必要はありません.ただ,共同研究や講習会等で企業さんとも関係することがありますので,正確に確認しておくことにしました.

まず,minicondaはAnacondaパッケージの簡易版です.Pythonと最低限必要なライブラリのみをパッケージにしたものです.インストーラーのファイルサイズが約60MBと小さく,miniconda3ディレクトリに初期インストールされたファイルも約400MBとコンパクト.ちなみにPytorch等をインストールすると10GBぐらいの記憶容量を消費します.

docs.conda.io


インストールはminicondaのサイトから自分のPCに合ったインストーラをダウンロードしてインストールするだけ.

現時点で最初に入っているライブラリは下記(バーションなどは日々更新されていきます).

conda list
# packages in environment at C:\ProgramData\Miniconda3:
#
# Name Version Build Channel
brotlipy 0.7.0 py38h2bbff1b_1003
ca-certificates 2020.10.14 0
certifi 2020.6.20 pyhd3eb1b0_3
cffi 1.14.3 py38hcd4344a_2
chardet 3.0.4 py38haa95532_1003
conda 4.9.2 py38haa95532_0
conda-package-handling 1.7.2 py38h76e460a_0
console_shortcut 0.1.1 4
cryptography 3.2.1 py38hcd4344a_1
idna 2.10 py_0
menuinst 1.4.16 py38he774522_1
openssl 1.1.1h he774522_0
pip 20.2.4 py38haa95532_0
powershell_shortcut 0.0.1 3
pycosat 0.6.3 py38h2bbff1b_0
pycparser 2.20 py_2
pyopenssl 19.1.0 pyhd3eb1b0_1
pysocks 1.7.1 py38haa95532_0
python 3.8.5 h5fd99cc_1
pywin32 227 py38he774522_1
requests 2.24.0 py_0
ruamel_yaml 0.15.87 py38he774522_1
setuptools 50.3.1 py38haa95532_1
six 1.15.0 py38haa95532_0
sqlite 3.33.0 h2a8f88b_0
tqdm 4.51.0 pyhd3eb1b0_0
urllib3 1.25.11 py_0
vc 14.1 h0510ff6_4
vs2015_runtime 14.16.27012 hf0eaf9b_3
wheel 0.35.1 pyhd3eb1b0_0
win_inet_pton 1.1.0 py38haa95532_0
wincertstore 0.2 py38_0
yaml 0.2.5 he774522_0
zlib 1.2.11 h62dcd97_4

下記のサイトを参考にAnacondaのリポジトリに依存せず環境を作っていきます.

Anacondaの有償化に伴いminiconda+conda-forgeでの運用を考えてみた - Qiita

まずは,各種設定をするため端末を開く.Windowsの場合は,スタートメニューからAnaconda Prompt (Miniconda3)を管理者として選択(右クリックして「管理者として実行」)し,端末を開く.WindowsのコマンドプロムプトはPython等へのパスが設定されてないのでAnacondaのコマンドプロムプトを使う.

デフォルトのチャネルが設定されているかどうか確認する.

conda config --show channels

デフォルトのチャネルdefaultsがある場合は削除しておく.

conda config --remove channels defaults

これでデフォルトのチャネル(ライブラリをダウンロードしてくるサイト)がなくなったので,ライブラリをインストールするたびにチャネルを指定します.また,依存しているAnacondaのレポジトリのライブラリをインストール候補に含めないように --overridge-channels オプションを付ける.

pytorchのインストールは例えば下記のように実行する.pytorchのバージョンの指定が必要だったり,インストール方法が変わったりするので,本家のPytorchのサイトを参照すること.(ただし,本家のcondaのコマンドに-c conda-forgeを追加することを忘れないで)

conda install pytorch -c pytorch -c conda-forge --override-channels
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

environment location: C:\ProgramData\Miniconda3

added / updated specs:
- pytorch


The following packages will be downloaded:

package | build
---------------------------|-----------------
blas-2.109 | mkl 13 KB conda-forge
blas-devel-3.9.0 | 9_mkl 12 KB conda-forge
certifi-2020.12.5 | py39hcbf5309_1 144 KB conda-forge
conda-4.10.1 | py39hcbf5309_0 3.1 MB conda-forge
cudatoolkit-11.1.1 | heb2d755_7 1.20 GB conda-forge
liblapacke-3.9.0 | 9_mkl 4.0 MB conda-forge
libuv-1.41.0 | h8ffe710_0 341 KB conda-forge
mkl-devel-2021.2.0 | h57928b3_390 5.8 MB conda-forge
mkl-include-2021.2.0 | hb70f87d_389 759 KB conda-forge
ninja-1.10.2 | h5362a0b_0 273 KB conda-forge
numpy-1.20.2 | py39h6635163_0 5.3 MB conda-forge
python_abi-3.9 | 1_cp39 4 KB conda-forge
pytorch-1.8.1 |py3.9_cuda11.1_cudnn8_0 1.53 GB pytorch
typing_extensions-3.7.4.3 | py_0 25 KB conda-forge
------------------------------------------------------------
Total: 2.75 GB

The following NEW packages will be INSTALLED:

blas conda-forge/win-64::blas-2.109-mkl
blas-devel conda-forge/win-64::blas-devel-3.9.0-9_mkl
cudatoolkit conda-forge/win-64::cudatoolkit-11.1.1-heb2d755_7
intel-openmp conda-forge/win-64::intel-openmp-2021.2.0-h57928b3_616
libblas conda-forge/win-64::libblas-3.9.0-9_mkl
libcblas conda-forge/win-64::libcblas-3.9.0-9_mkl
liblapack conda-forge/win-64::liblapack-3.9.0-9_mkl
liblapacke conda-forge/win-64::liblapacke-3.9.0-9_mkl
libuv conda-forge/win-64::libuv-1.41.0-h8ffe710_0
m2w64-gcc-libgfor~ conda-forge/win-64::m2w64-gcc-libgfortran-5.3.0-6
m2w64-gcc-libs conda-forge/win-64::m2w64-gcc-libs-5.3.0-7
m2w64-gcc-libs-co~ conda-forge/win-64::m2w64-gcc-libs-core-5.3.0-7
m2w64-gmp conda-forge/win-64::m2w64-gmp-6.1.0-2
m2w64-libwinpthre~ conda-forge/win-64::m2w64-libwinpthread-git-5.0.0.4634.697f757-2
mkl conda-forge/win-64::mkl-2021.2.0-hb70f87d_389
mkl-devel conda-forge/win-64::mkl-devel-2021.2.0-h57928b3_390
mkl-include conda-forge/win-64::mkl-include-2021.2.0-hb70f87d_389
msys2-conda-epoch conda-forge/win-64::msys2-conda-epoch-20160418-1
ninja conda-forge/win-64::ninja-1.10.2-h5362a0b_0
numpy conda-forge/win-64::numpy-1.20.2-py39h6635163_0
python_abi conda-forge/win-64::python_abi-3.9-1_cp39
pytorch pytorch/win-64::pytorch-1.8.1-py3.9_cuda11.1_cudnn8_0
tbb conda-forge/win-64::tbb-2021.2.0-h2d74725_0
typing_extensions conda-forge/noarch::typing_extensions-3.7.4.3-py_0

The following packages will be UPDATED:

certifi pkgs/main::certifi-2020.12.5-py39haa9~ --> conda-forge::certifi-2020.12.5-py39hcbf5309_1
conda pkgs/main::conda-4.9.2-py39haa95532_0 --> conda-forge::conda-4.10.1-py39hcbf5309_0
openssl pkgs/main::openssl-1.1.1i-h2bbff1b_0 --> conda-forge::openssl-1.1.1k-h8ffe710_0


Proceed ([y]/n)?

”-c conda-forge" を付けて,Anacondaのレポジトリにあるライブラリではなくconda-forgeのライブラリをダウンロードするように指定する.

なお,Anacondaのリポジトリにあって,conda-forge にはないライブラリが運悪く必要になった場合は詰む.あきらめて,Anacondaを商用で使うか,pipで別にインストールするか,自分でソースコードからコンパイルして野良インストールするかなど,状況に応じていろいろ試すしかない.


Minicondaはいろいろ重要なライブラリが抜けている.Numpyも入っていない(上記のpytorchのインストール時には自動的に導入される).Jupyter Notebookは研究上欠かせないツールなので下記でインストールする.

conda install jupyter notebook -c conda-forge --override-channels

Scikit-Learnもインストールできる(裏を返せば,Minicondaには含まれていない).

conda install scikit-learn -c conda-forge --override-channels

以下,Anacondaレポジトリのライセンスが気になる方向け.

https://repo.anaconda.com/に対して商用利用のライセンスが設定されている.ここでは,Anacondaのレポジトリにアクセスせず, conda-forge で代用しているので,このライセンスの影響を受けない.conda-forge(https://conda-forge.org/)はフリーでのアクセスを許可している.Anacondaのレポジトリのライセンスは下記のようになっている.

www.anaconda.com

特にAnacondaレポジトリに対するアクセスが商用利用とみなされる場合の規定を引用する.

To avoid confusion, “commercial activities” are any use of the Repository which is NOT:

use solely by an individual using for personal, non-business purposes,
use by a student or employee of an educational institution in connection with educational activities,
use by an employee or volunteer on behalf of a non-profit institution in connection with the provision of charitable services,
use by a 501(c)(3) non-profit research institution in connection with non-commercial activities, such as research to address societal needs and global challenges, public policy development, or the advancement of science for the general good, where such work will not result in revenue to the institution, or
use by entities in common control with each other with fewer than 200 employees in aggregate.

試訳

混乱を避けるために「商用活動(commercial activities)」とは,リポジトリの利用であって,次に*含まれないもの*すべてである.

個人的な目的,非商用目的のために個人が利用する場合
教育活動に関連して教育機関の学生および被雇用者が利用する場合
慈善活動の提供に関連して非営利団体のために被雇用者やボランティアが利用する場合
非営利活動に関連して,501(c)(3)に該当する(※訳注:日本の公益法人に相当する)非営利の研究機関が利用する場合.例えば,公益にかなった,社会的ニーズや地球的規模の挑戦を扱う研究,公共政策開発,科学の進歩.ただし,機関の収入につながらないもの,または全体で200名未満が共通に統制された事業体による利用であること.

当然原文が優先で,私の試訳に正確でない部分があるかもしれませんが,普通の企業での利用は商用利用となるといって間違いはないでしょう.ただし,繰り返しになりますが,conda-forge などのリポジトリを利用するのであれば,minicondaからスタートしていれば問題ありません.あくまで,Anacondaのリポジトリの利用に対するライセンスが商用利用を制限しているからです.その理由は,営利利用のアクセスがAnacondaレポジトリに大量に発生していてレポジトリサーバー維持にかかる負荷が増大しているためだということのようです.個人的には,ミラーを(ボランティアベースで)用意すれば良いように思いますが,ライセンスの規定でミラー目的のレポジトリコンテンツのダウンロードを禁止していますので,現状では実現できません.

最後に:ライセンス関係は常に法的な問題を含みますので,上記の内容について何か損害が発生しても当方は一切の責任は負いません.不安があれば,法務部門や弁護士に相談してAnacondaレポジトリの規定(Terms of Service)を遵守してください.

20年前の日本語QA

最近久しぶりにQAに関係した研究をしたので,日本語QA技術に関する歴史を紹介してみる.

2001年に某研究所のオープンハウスにてQA技術を公開した.システム名はSAIQAである.この頃38才ぐらいなので一番エネルギーがあふれている頃.これは最初の実用的な日本語QAのシステムで,もうちょっと言えば,世界初の実用的日本語QAシステムである.この時点で新聞記事10年分から,自由文形式のクイズ的な質問の答えをリアルタイムで探すことができた.

オープンハウスでの展示の情報は今でも残っており,下記リンクの2-Aの展示「ずばり答えます、あなたの問いに ~大量のテキストに答を求める質問応答技術~」がそれ.この頃Luceneのような便利なツールは無かったので検索エンジンも自作だった.(※確か検索エンジンは現在東北大の鈴木さん作)

www.kecl.ntt.co.jp

ちなみにこのオープンハウスは研究所開設10周年記念を兼ねたイベントで私が実行委員長を務めた.この年は委員が全員特別に頑張ってバーチャルオープンハウスとしてイベントをHPにも掲載したので,今でもこうして振り返ることができる.(例年は通常の講演会とポスター発表で,発表内容の記録は紙のパンフレットとしてしか残っていない)


この日本語QAシステムはマスコミの評判が良く,新聞・雑誌多数に取り上げられ,NHKニュース10にも取材を受けて,2002年1月7日に約3分間のニュースになった.NHKの看板ニュース番組で3分間みっちり我々のQAシステムが取り上げられたということで,広告費に換算すると会社には莫大な貢献になったように思う.

f:id:YutakaSasaki:20210415153417p:plain
なんでも答えるコンピューター

htop

Unix系のtopコマンドは、プロセスの実行状況やCPU毎の負荷状態を見ることができて便利ですが、コア数(ハイパースレディング含む)が50ぐらいまでしか端末に表示できません。
96コア(192スレッド)のサーバーのCPU毎の状況は画面に収まりきらないため、どうしたものかと思って調べると htop というコマンドがありました。
htopでは、全コアの負荷状況がキャラクター端末上に棒グラフ形式で表示され、全体の負荷状況が一目で理解できます。

知識グラフと言語処理

最近、知識グラフに関する研究に注目しています。

知識グラフは、知識の断片を「主語ー述語ー目的語」の3つ組で表して、3つ組の集合として知識を記述する方法です。
このように3つ組にするということは、数学的には2項関係の集合として知識を書くこと、つまり2引数の原始論理式(Atomic Formula)の
集合として、知識を書くということになる。知識グラフというように、主語と目的語をノードとして、述語をエッジとして表せば、3つ組の集合はグラフ構造になります。

なお、知識グラフはオントロジーとはそのままでは対応しません。オントロジーの3つ組はRDF(またはRDFS)に沿っていなければなりません。特に、クラス間をリンクでつなぐのではなく、2つの概念ノード間を属性ノードを通してdomrain, rangeリンクでつなぐ形の3つ組でなければなりません。

話を戻して、知識グラフは、2項関係(事実型知識)しか表せませんので、記述できる知識は限られますがその分扱いが簡単になります。知識グラフに対して、知識グラフ上でのスコア関数を学習する(例えばTransE, ComplEx)ことで、ノードやリンクの予測(補完)問題を高い精度で解けるようになってきています。

さらに知識グラフと言語処理を深層学習のフレームワークの中で融合できる点が注目されます。2017年からSymbolic-Neural Learingをいう国際ワークショップを開催してきましたが、まさにこのような研究の盛り上がりを期待していたわけです。

余談ですが、国際会議の査読をしていると、時々純粋な知識グラフに関する論文が言語処理の国際会議に投稿されてきて、これは言語処理に関する国際会議のスコープ内の論文なのだろうかと悩むこともあります。何らかの形で言語処理とつないでくれれば悩まなくてよいのですが。

GeForce RTX-3080

深層学習にGPUを使うのは常識になっていますが,GeForce RTX 3090はコア数が10,496、GPUメモリが24GB、GeForce RTX-3080はCUDAコア数が8,704,GPUメモリが標準で10GBあるので,深層学習用にはかなり使えます.良い世の中になりました.この調子なら,来年には20万円程度で深層学習の実験環境が簡単に整いそうです.最近の深層学習はGPUメモリを大量に使う方向ですので,3080では大規模実験には力不足でA6000ぐらいが必要になることもありそうですが,だいたいの場合はバッチサイズを小さくするなどすれば動くでしょう.MSIから3080を搭載したノートPCが発売されていて(GPUメモリが16GB),値段的にはかなり高いのですが,通常の深層学習の研究には十分強力です.注意点は,このノートは最新のものなので無線LANIntel AX210になっていてUbuntu 20.04でも対応してないこと.有線LANで接続するか,TP-WN725NのようなUSB無線LAN子機を買うかする必要あります(USBに差すだけで動きます).そのうちUbuntuがAX210にも対応すると思いますが.(カーネルの再構築をしてfirmwareを読み込めば動きそうですが,そんなに暇ではありません)余談ですがMSIのノートPCのキーボードは打ちにくいです.右シフトの位置とかが最悪です.

DyGIE++備忘録

研究員や学生さんが最近実験に使っているDyGIE++を自分のGPUボックスにインストールしたときの備忘録.

DyGIE++はPyTorchで書かれた固有表現・関係・イベント抽出ツールでインストール法や使い方は下記に書かれている.
github.com

ここでは捕捉を書いておく.

  • インストール

上記本家からDyGIE++をダウンロードし展開(またはclone)したディレクトリに移動して以下を実行

conda create --name dygiepp python=3.7
conda activate dygiepp
pip install -r requirements.txt
conda develop . # Adds DyGIE to your PYTHONPATH

AllenNLPを使っているので,allennlpをインストール

pip install allennlp

  • 動作確認のためsciercデータで学習

手元のマシンはGPUが1枚しかないので(うちの研究室でもGPU4枚刺しのサーバーを何台か使えますが,多くの人は1枚でしょうから),training_config/scierc.jasonnetを編集

なぜかインストールしたscierc.jasonnetのcuda_deviceの設定が1(gpu1を指定)になっていたので,この数値を0に置き換えてファイルを保存する.ちなみにこのファイルにはNERとREとERとCorefのバランスをとるパラメータの設定がある.データセットにないものについては0にする.SciERCはNEとREとCorefのアノテーションが付いていて,Eventはない.

sciercのデータをダウンロード

bash ./scripts/data/get_scierc.sh

  • 学習

bash scripts/train.sh scierc

もし,何かの手順が悪いか,または途中で学習をとめたり,再度学習をする場合は,下記のエラーが出る.

allennlp.common.checks.ConfigurationError: Serialization directory (models/scierc) already exists and is not empty. Specify --recover to recover from an existing output folder.

この場合は,modelsディレクトリに行って,sciercディレクトリの名前を変えるか,必要なければ削除すると,エラーが解消される.

学習にはGPUメモリを5.4GB程度使用.学習時間はTitan Xで1時間ぐらい.学習されたモデルファイルは models/scierc/model.tar.gzとして保存される.

  • テスト

テストデータによる評価の例は下記のようになる.

allennlp evaluate models/scierc/model.tar.gz data/scierc/normalized_data/json/test.json --cuda-device 0 --include-package dygie --output-file models/scierc/metrics_test.json

評価結果は --output-fileで指定したファイルに出力される.今回の学習では,NERが65%, REが45%程度であり,事前学習モデルと同じぐらいの性能は出ている.