機械学習に関する雑多なツール郡

日々のデータ分析業務の生産性向上のため、ちょっとしたツールを作ってプロジェクトに利用しています。 データ分析プロジェクトの開発環境は組織によって色々異なるんで、どこでも入れやすいように導入を簡単して破棄も簡単できるように心がけてます。 とはいえ作っているツール群は以下の資料のようにデータ分析とそのデプロイを分業しないような中小のチームを意識したものになっている気はします。

Cookiecutter Docker Science

最近、機械学習プロジェクトはDockerコンテナ上にデプロイすることが多い(ECSやKubernates)です。デプロイは置いておいても 機械学習プロジェクトをDocker化しておくとプロジェクトのポータビリティと再現性が上がって便利です。

しかしDockerはイメージ、コンテナ生成(破棄)、などのコマンドが煩雑であまり頻繁に利用したいものではありません。 その結果、Docker化がプロジェクトの終盤にずれ込んで、時間を浪費してしまうことがありました。

そこで Cookiecutter Docker Science を作りました。 これはCookiecutter用のプロジェクトテンプレートの一つで、Docker化を想定した機械学習プロジェクト用です。 日々の業務ではこのテンプレートを使って、プロジェクトを進めることが多いです。しょせんテンプレートなんで、プロジェクトにフィット しないことがあるんですが、生成されたMakefileをちょっと書き直すだけでそこそこ対応できます。

このテンプレートの使い方は こちらの Qiita 記事(爆速で Docker コンテナにデータ分析環境を生成するテンプレート を作りました) を参照してください。

Hideout

大量の自然言語データを使ってアプリケーション(対話や質問応答)を作るプロジェクトがあります。このようなプロジェクトだと単純に機械学習器を データに適用して結果を返すAPIを作れば完結するということはありません(End-to−Endでエイヤってやる手もありますが)。複数のデータソースからある 程度の規模のデータを取得し、最終成果物ができるまで多段のステップを経由します。

必要なデータの取得先はS3やデータベースなどがあります。データを取得するのには(一部分づつ取得するにしても)そこそこ時間がかかります。取得したデータを加工(機械学習器を適用するなど)するのも 同じように時間がかかります。このように実行に時間がかかると、修正、検証の施行サイクルが遅くなってしまいがちです。その結果、コードの修正に時間がかかり品質も改善できない状態が起こっていました(このとき実行の高速化を優先して一時ファイルをレポジトリに追加してしまうとそれはそれで悲劇の温床に👻)。

そこでHideoutというライブラリを作りました。このライブラリはプログラム中で生成されるオブジェクトをキャッシュしてくれる機能を 提供します。Hideoutのキャッシュ機能をオンにして実行すると、指定したオブジェクトはキャッシュされたファイルからロードして生成されるので、実行速度が高速になって検証サイクルが高速に回せるようになりました。

このツールの使い方については こちらの記事 を参照してください。

pfm

機械学習やデータ分析の業務って、Webサービスのように一つのレポジトリを改善し続けるものの割合はそれほど多くなくて、数ヶ月で終わってしまう 事が多いです。このような実験は会社が提供してくるEC2インスタンスなどの計算機群にsshで入って作業する(Jupyter NotebookなどのUIはポートフォワードしてつなげる)んですが、 計算機名やポートフォワードの設定を覚えておくのが億劫です。

そこで pfm というコマンドラインツールを作ってポートフォワードの設定を管理しています。このツールは複数のポートフォワード設定を テーブルに保持してくれます。 このツールを使うと pfm connect project-name で作業している計算機にポートフォワードの設定付きでログインしてくれるんで、実験どこでやってたかなと いうこともなくなってそこそこ重宝してます。