Help us understand the problem. What is going on with this article?

Amazon SageMakerとBlueoilを使って量子化されたDeep Learningモデルを作成する

この記事は、LeapMind Advent Calendar 2019 10日目の記事です。

TL;DR

Amazon SageMakerが使えるようになっていれば、下記の手順で自分でトレーニングした量子化されたDeep Learningモデルが簡単に手に入るよ。

この記事の目的

私が所属しているLeapMindでは、数ヶ月に1度、HackDaysという全社員向けの自由に好きな開発を好きな人とやって、何かしらの成果を出すことが目的のイベントがあります。
本記事では、その期間で実施した、Amazon SageMaker x Blueoilを利用したOn-Demand Trainingについて、その紹介をしようと思います。

Amazon Sagemakerって?

Amazon SageMaker は、すべての開発者やデータサイエンティストが機械学習 (ML) モデルを迅速に構築、トレーニング、デプロイできるようにする完全マネージド型サービスです。

Ref: https://aws.amazon.com/jp/sagemaker/

上記にあるように、SageMakerは機械学習モデルの作成からデプロイまでのワークフローに必要な多種の機能を提供しているサービスです。
SageMakerを利用することで、On-demandなGPU利用(学習をJobとして投げるとGPUインスタンスの作成、起動、停止を実施してくれる)や、実験管理(モデルはS3に実験と紐づいて保存される、ハイパーパラメータの管理、実験中のリソースモニタリング)などが可能になります。
今回はAmazon SageMaker Notebooksを利用してTrainingの実行を行います。

Blueoilって?

Blueoil is a software stack dedicated to neural networks. It includes special training method for quantization and original networks designed to be highly compatible with FPGA devices. This is done in order to operate a neural network at high speed on a low-powered FPGA. New models can be trained easily by only preparing data. The finished model can be converted into a binary file that runs on FPGA or CPU devices with a single command.

Ref: https://blueoil.org/

BlueoilはLeapMind Inc.が提供している、低消費電力なデバイス上でディープラーニングを実現するためのオープンソースソフトウェアスタックです。
Blueoilを利用することで、量子化されたDeep Learningモデルの学習および、学習したモデルをCPUやFPGAデバイスで実行するためのBinary Fileの生成が可能になります。
今回は機械学習を使った今までにないデバイスをあまねく世に広めるために、BlueoilをGPU環境が手元にない状態でも簡単に利用できるようにするため、SageMakerを試してみました。

実行手順

前置きが長くなりました。。。以下に具体的な実行手順を記載します。

事前準備

AWSアカウントはすでに作成済みとします。

SageMakerのセットアップ

下記の公式DocumentのStep1, Step2にしたがってください

SageMaker > ノートブックインスタンスにてノートブックインスタンスの作成をclick
image.png

Notebookインスタンス内でTraining等は行わないため、最も安価なml.t2.mediumで作成
image.png

Noteboookのセットアップ

  • インスタンスが立ち上がったらアクションJupyter を開くをclick image.png
  • Jupyter Notebookが開くので、新規でファイルを作成(kernelはなんでも良い) image.png
  • git cloneを実行

!git clone https://github.com/hadusam/blueoil-sagemaker
Ref: https://github.com/hadusam/blueoil-sagemaker#on-sagemaker-notebook-instance
image.png

  • 元のディレクトリに戻るとblueoil-sagemakerというディレクトリが作成されているので、その配下のblueoil_cifar10_example.ipynbを開く
    image.png
    image.png

  • kernel選択のダイアログが出るので、conda_tensorflow_p36を選択
    image.png

On-Demand Training

準備ができました。
ここからはJupyter Notebook上でShift + Enterしていくだけですが、せっかくなので個々について解説します。

SageMaker用のBlueoil Docker Imageの作成

Dockerhub上のblueoil/bueoil:latestをpullし、SageMakerから実行されるPython scriptを追加してBuildし直し、ユーザーのECR上のblueoil-sagemakerというrepositoryにPushします(なければRepositoryを作成します)。
詳細については実行しているshell scriptを確認してください。
image.png

データセットの準備

Trainingに利用するデータセットを準備してS3へアップロードします。
今回はSampleとしてCifar10(のCaltech101フォーマット)を利用していますが、Blueoilでサポートしているデータセットフォーマットであればなんでも良いです。

image.png

Training用のConfigの準備

BlueoilのConfigファイルを作成してS3へアップロードします。このコンフィグ内にはNWの指定やハイパーパラメータ等が含まれます。今回はSampleがRepository内に配置されているのでそちらを用います。
image.png

Training実行

いよいよTrainingです。
今回はNotebookインスタンス上ではなく別途GPUインスタンスを起動してTrainingを実行するのでCase1: On your local GPU serverはスキップしてください。

image.png

実行環境(docker image)や学習に使用するインスタンスサイズ、ハイパーパラメータ(実行スクリプトに与えるコマンドライン引数)を指定します。
image.png

S3に保存したデータセットやコンフィグを指定してestimator.fitでTrainingを実行します。
image.png

以上で学習を実行することができました!
SageMaker上でGPUインスタンスが立ち上がり、学習が完了すると結果ファイルをS3に保存してくれます。

Trainingの確認

SageMakerでは実行したTrainingをGUIで一覧確認できます。

Training一覧

image.png
image.png

作成されたModelのダウンロード

image.png

メトリクス確認

CPU/Mem/Diskだけでなく、GPUリソース利用状況がみれる!
image.png

推論の実行

今回作成したModelをダウンロードして下記の手順に従うことで、CPUやFPGA上での推論が可能になります!

まとめ

SageMaker上でBlueoilを利用したTrainingが実行できました!
今回はTrainingのみに焦点を絞りましたが、SageMakerを利用することで、他にもAnnotation(SageMaker Ground Truth)やGreengrassとの連携によるモデルデプロイなど様々な拡張が可能なので、夢が広がりますね!
このように、AWSなどが提供しているMLエコシステムを利用すれば、手元にGPUがなくても、簡単にDeep Learningを試してみることができます。
皆さんもぜひ、自分の手で、今回のSageMaker x Blueoilを試してみてください!

hadusam
intel-fpga-user-community
インテル® FPGA を使っているユーザー皆さんの団体です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away