オープンソース

機械学習基盤に必要なソフトウェア

機械学習基盤とは、機械学習を行うために必要な様々なリソースを用意し、迅速に機械学習のモデリングや実験を行えるようにするための設備です。もちろん、必要となる要素は、実際に利用しようとする機械学習のアルゴリズムによっても変わります。しかし、機械学習のプロセスには共通性が多いことから、いくつかの機械学習基盤が用意されています。

機械学習によるシステム開発の特徴

機械学習では、実際に作ってみないと予測できないことが多くあり、すぐに期待した通りの成果がでるとは限りません。そのため、実際にモデルを構築してみて、どのくらいの精度が出せるのかを測定して、期待通りでなければ作り直すという、トライアンドエラーを繰り返すことになります。

また、機械学習のシステムでは、一つの学習モデルだけで完結することはほとんどありません。例えば、人間が名刺からデータを読み出すような場合を考えても、様々なプロセスが考えられます。

  • 名刺を正しい方向に向ける
  • 縦書きなのか横書きなのかを判定する
  • 名刺の中をいつかのフィールドを分割する
  • 各フィールドがロゴ、名前、役職、社名、住所、メールアドレス、電話番号のどれにあたるかを推測する
  • 各フィールドの特性に合わせて情報を読み取る

機械学習のシステムは、この人間の行うプロセスと同様に、様々な機能要素を組み合わせて実現されることになります。そして、それぞれに最適な学習アルゴリズムと学習方法を考えなければなりません。

このように、機械学習を使ったシステムの開発では、非常に多くのトライアンドエラーを行うことになります。そのため、機械学習基盤には、このトライアンドエラーが迅速にできる機能が求められるのです。

機械学習のプロセスと機械学習基盤

機械学習のシステム開発には、いくつかのプロセスがあります。

  • 学習用データの準備
  • 機械学習モデルの作成
  • モデルの適用

機械学習基盤は、この各プロセスを効率よく行えるよう支援します。

機械学習基盤のプロセス画像

学習用データの準備

学習用データの準備では、次のような作業が必要になります。

  • 学習用データの定義
  • 学習用データの収集
  • 学習用データの加工

用意するデータは、作成するシステムによって様々です。例えば、手書き文字を認識するシステムを作成する場合には、たくさんの手書き文字の画像を用意する必要があります。不良品のチェックを行う場合には、過去に発生した不良品の画像と、正しい画像とを用意する必要があります。商品の需要予測をする場合には、過去の商品の販売データと、天気、気温、人口の変化、社会的なイベントなど関連しそうな様々なデータを用意しなければなりません。場合によっては、インターネットなどから一般的なデータを収集する仕組みが必要になります。また、機械学習では、学習処理に適した状態でデータを加工することも必要です。処理しやすい大きさに変えたり、一部のデータだけを取り出して使う場合もあります。

こうしたことから、機械学習基盤には、次のような機能が求められます。

  • データ収集や加工に必要なソフトウェアをすぐに利用できる
  • 必要に応じて、データ保管に必要な領域を割り当てられる

モデルの作成

機械学習のシステム開発の一連のプロセスのうち、モデルの作成では、次のような作業が必要になります。

  • アルゴリズムの選択
  • コーディング
  • 学習
  • モデルの評価
  • チューニング

機械学習では、利用するアルゴリズムに合わせて、様々なソフトウェアやライブラリが公開されています。多くの場合には、こうしたソフトウェアやライブラリを利用して、モデルを作成します。モデルを作成したら、用意したデータを使って実際に学習を行う必要があります。学習には、非常に多くの計算機資源が必要です。機械学習用の高速なGPUを利用したり、複数のコンピュータを使った並列コンピューティングなどが行われます。そして、実際に学習が完了した後で、モデルを評価をします。モデルの精度が不足する場合には、モデルのパラメータを変えるなどのチューニングをしたり、学習データを変えたり、アルゴリズムを変えたりといった試行錯誤が必要になります。

こうしたプロセスを支援するため、機械学習基盤には、次のような機能が求められます。

  • 様々なアルゴリズムに対応したライブラリやソフトウェアを利用できる
  • 必要に応じてGPUや並列コンピューティング環境の割り当てができる
  • 耐障害性があり、学習が中断しない
  • 迅速に学習環境を整備でき、不要になったらすぐに破棄できる
  • 学習環境を必要に応じて再現できる
  • 完成した学習済みモデルを適切に保管できる

モデルの適用

適切なモデルが見つかり、精度の高い学習ができたら、そのモデルを実際に利用するシステムとして作り上げる必要があります。実際のシステムには、画像やデータを入力するインタフェースや、結果を可視化するソフトウェアなどが必要です。こうした周辺の環境も含めて、利用できるように整備するのがモデルの適用の段階です。当然ですが、システム稼働後の運用のことも考慮して基盤を構築する必要があります。

このプロセスを支援するためには、機械学習基盤には、次のような機能が求められます。

  • 作成したモデルを、本番システムへ移行できるポータビリティ
  • ソフトウェアのバージョン管理ができる
  • 運用中にソフトウェアを安全にアップデートできる
  • 機密情報を適切に管理できる

機械学習基盤とDockerコンテナ

機械学習基盤としては、コンテナ型仮想化が注目されています。コンテナ型仮想化にも、様々な種類がありますが、その中でもDockerコンテナが最も有力視されています。それには、次のような理由があります。

  • Docker HUBからソフトウェアを自動的にダウンロードし、すぐに使える
  • Docker HUBには、機械学習で利用する非常に多くのソフトウェアが収録されている
  • 利用するリソースが小さく、少ない予算で効率よくシステムを作成できる
  • ソフトウェアのバージョン管理がしやすい
  • 従来の仮想サーバに比べて、スクラップ&ビルドに向いている
  • コンテナレポジトリをローカルに作成することもでき、機密性も担保できる
  • ポータビリティに優れていて、多くのシステムで動作することができる

Kubernetes

Kubernetesは、Dockerコンテナのオーケストレーションツールとしては、デファクトスタンダードの位置づけのソフトウェアです。コンテナのデプロイメント、管理などの機能を備えています。また、複数のノードを一つのシステムとして動作させることができます。そのため、機械学習基盤に必要なスケーラビリティや耐障害性などを提供してくれます。Kubernetesには、実運用時に必要なコンテナのバージョン管理や、アップデートを支援する機能もあります。Kubernetesを利用することで、コンテナのメリットを最大限に生かした機械学習基盤を構築することができます。

機械学習基盤のサービスと課題

Amazon、Google、Microsoft Azureなど、クラウド事業者がコンテナが利用できる機械学習基盤のサービスを提供しています。

Google Cloud Kubernetes Engine

Google CloudでKubernetesを利用できるサービスです。2014年に他社に先駆けてサービスが開始されました。Google Kubernetes Engineでは、Kubernetesとの互換性を保証するCertified Kubernetesが明記されています。Google Cloud Platform(GCP)を利用して、モニタリング、ロギング、CI/CDなども利用できます。また、Google Container Registryを利用することで、専用のDockerイメージの管理環境も利用できます。Kubernetesは、もともとGoogleが設計したシステムであることから、オリジナルのKubernetesとの親和性が非常に高く、また最も使いやすいと言われています。また、Kubernetesのクラスタノードの拡張性が高いのも特徴です。

Amazon ECS(Amazon Elastic Container Service)

Amazon ECSは、DockerコンテナをサポートするAmazonのサービスです。コンテナ化されたアプリケーションをASW上で利用するため、コンテナオーケストレーションソフトウェアを備えています。Amazon ECSでは、KubernetesではなくAmazonの独自仕様のオーケストレーションツールとなっていて、コンテナの操作、クラスター化、スケールアウト、GPUの利用環境などを提供します。また、Amazon ML(Machine Learning)では、モデルの構築、学習、デプロイを支援する仕組みを備えています。Amazon ECSは、独自のコンテナ環境です。そのため、運用環境をオンプレミスに置きたい場合には、同様の環境をオンプレミスに作成することが難しいという欠点があります。

Amazon EKS(Amazon Elastic Container Service for Kubernetes)

2017年から、AWSで提供されるようになったKubernetesを使ったコンテナ型仮想化の基盤です。2018年には日本のRegionでも利用できるようになりましたが、まだサービス地域が限られています。標準的なKubernetes環境とアプリケーションレベルの互換性があります。Amazon EC2との連携ができたり、AWSに馴染んでいる人にとっては使いやすいと言われています。Amazon MLも利用することができます。AWSとの連携と、オンプレミスとの互換性の両方が必要な場合には、このサービスが適しています。

AKS(Azure Kubernetes Service)

MicorosoftのAzure上でKubernetesを利用できるサービスです。2018年にサービス開始され、GoogleやAmazonと比べて後発です。今のところ、Kubernetesのクラスタノードの最大数が他のサービスよりも小さく拡張性が劣ります。一方で、Amazon EKSに比べてサービス地域が広いのが特徴です。

Cloudベンダーのコンテナサービスの課題

機械学習基盤として考えたときに、各Cloudベンダーが提供しているサービスを利用する場合に気になるのは、やはりオンプレミス環境との互換性です。どのサービスでも学習に必要なGPUのような計算機資源を簡単に利用できるのは、非常に大きなメリットです。また、各社とも単純にコンテナが利用できるだけではなく、機械学習に適したツールを提供しています。しかし、こうした独自の環境に頼ると、モデルの適用をする段階になって同じものが再現できない可能性があります。また、機械学習を利用したシステムは、継続的に利用しつづける可能性を考慮する必要があります。インターネット上のサービスの状態によって、生産ラインが止まるなど業務に影響があることは、どうしても懸念材料になってしまいます。

オンプレミスで機械学習基盤を構築する

Kubernetesは、オープンソースソフトウェアですので、オンプレミスで構築することが可能です。Cloudベンダーが提供する機械学習基盤を利用する場合でも、実運用環境としてはオンプレミスのKubernetesを利用することが多いようです。そのため、各CloudベンダーもKubernetesとの互換性を非常に気にしています。Kubernetesはコンテナの管理基盤としてはデファクトスタンダードとなっています。

オンプレミスで機械学習基盤を構築する場合には、次のような要素を考慮する必要があります。

コンテナオーケストレーションツール

コンテナオーケストレーションツールの代表格は、やはりKubernetesです。特に学習をクラウド環境で行い、実運用をオンプレミスで行う場合には、クラウドベンダーとの互換性があるKubernetsを選択する必要があります。

コンテナリポジトリの管理

オンプレミスでコンテナ環境を作成する場合には、コンテナリポジトリも用意しておく必要があります。デージーネットでは、OSSのレポジトリ管理ツールであるGitLabの利用を推奨しています。

永続ストレージ

コンテナは、データを持たず、データは専用のストレージに配置するのが一般的です。そのため、Kubernetesのどのノードからでも利用できる永続ストレージを用意する必要があります。コンテナの永続ストレージとしては、NFS、Ceph、DRBD-SDSなどを利用することができます。ただし、NFSやCephを使う場合には、コンテナ間の排他制御を考える必要があります。デージーネットでは、排他制御の仕組みをストレージ側で実装しているDRBD-SDSを永続ストレージとして推奨しています。

コンテナノードのネットワークと外部ネットワークの接続

Kubernetesを利用すると、コンテナを稼働させるワーカーノード間のネットワークを一つのネットワークとして管理することができます。一方で、外部のネットワークとの連携を行う場合には、SDN(Software Designed Network)をサポートしたスイッチやロードバランサーが必要になります。

機械学習基盤のOSS

Kubernetes〜コンテナ管理の課題を解決するOSS〜
Kubernetesとは、コンテナの管理を自動化するためのソフトウェアです。コンテナは完全仮想環境化に比べ、ディスク、メモリ消費量を少量で利用できます。またサービスの起動が高速でバージョン管理を容易に行うことができます。Kubernetesを使用すると、コンテナの長所を最大限に活用することができます。
GitLab〜Dockerのプロジェクト管理とレジストリ〜
GitLabは、ウェブ型のGitリポジトリマネージャーです。ここではGitLabのコンテナレジストリについて説明いたします。

機械学習のためのOSS

Julius

Juliusは、オープンソースの機械学習済みの音響モデルを搭載した汎用大語彙連続音声認識エンジンです。Juliusの最大の特徴は可搬性であり、単語辞書や言語モデル・音響モデルなどの音声認識に必要なモジュールを組み替えることで、小規模の音声対話システムからディクテーションまで様々な幅広い用途に応用することができます。

TensorFlow

TensorFlowとは、ディープラーニング対応したOSSの機械学習用のソフトウェアライブラリです。TensorFlowが、ディープラーニングの複雑な理論を実装したOSSとして公開されたことで、ディープラーニングの利用が広まったと言われています。

 
 

機械学習基盤に必要なソフトウェアの先頭へ