#概要
本資料はJSCプロジェクトでの機械学習システム導入手順書です。
主な導入内容は、スプリーム独自の機械学習アプリケーション ”barn-owl”のインストールおよび設定です。
barn-owlは、各種機械学習アルゴリズムのモデルを作成したり、作成したモデルを利用してスコアリングすることができるwebアプリケーションです。Webアプリケーションのため、Apachのインストール・設定、ネットワーク設定が必要となります。
#前提
JSCプロジェクトでの機械学習サーバー(MLサーバー)はEC2上にAimstarおよび保守端末から接続できる環境になっています。
保守端末とMLサーバー間はssh、httpの通信が可能。
AismtarとMLサーバー間はhttpの通信が可能。
AismtarとMLサーバー間でファイル連携をする場合は、S3を介する想定。
OSはUbuntu 20.04を想定しています。CentOSを使用する際には、機械学習サーバー構築手順書_JSC案件_20190328_kawa_ykoba修正を参照して下さい。
(参)ローカル環境でAmazonLinux2を検証したい場合には、VirtualBoxなどのツールを用いて、
仮想環境上にAmazonLinux2を構築することも可能です。
- 参考URL:「Amazon Linuxのローカル環境を作成する」 https://qiita.com/horikeso/items/cc3d628069421e11d7ab
- 関連ファイル:\ss7\share\Aimstar\10_Aimstar導入顧客\2018_ジュピターショップチャンネル\60_導入\AWS社内開発環境\分析サーバー構築\Amazon Linux 2 ローカル仮想環境構築
JSC案件ではGPUを使用しないため、CUDAおよびCUDNNのインストールは行いません。
GPUが利用できない環境であってもbarn-owl自体は問題なく動作させることができます。
また、本番環境ではApacheの利用を推奨しますが、開発環境では、後述するDjangoの簡易サーバーを使用することもできます。
以下の手順はgithubのREADME.mdを書き直したものです。
#導入手順概要
以下の作業は、barn-owlを起動後、ブラウザ上で設定します。
以降個々の手順について説明します。
#導入手順詳細
Amazon EC2ではセキュリティグループの設定によって
事前にAWSコンソール画面にログインし、起動するサーバーのポートを開放しておいてください。
デフォルトではHTTPS:8001番。(※設定によりHTTPで起動することも可能です。)
(上記より、firewalldの設定によるポート開放は不要)
まず、前提となる各種ツールをダウンロードします。
開発環境を作成する場合は、SUP社内gitlab(192.168.0.63/barn-owl/barn-owl)の"develop"リポジトリからgit cloneでソースコードを取得し、User直下に配置してください。(配置場所は都合の良い場所でよい。)
もし、権限がない場合は管理者に問い合わせてください。
本番環境に配置する場合は、社内で取得したソースコードを用いて、User直下に配置してください。(配置場所は都合の良い場所でよい。)
今回は下記ファイルを解凍・利用してください。
"\ss7\share\Aimstar\10_Aimstar導入顧客\2018_ジュピターショップチャンネル\60_導入\AWS社内開発環境\分析サーバー構築\barn-owl.zip"
barn-owlはpython3.Xで動作します。
以下、Amazon Linux2でのインストール方法を記載します。
Amazon Linuxのyumにあるpythonを確認し、インストールします。
以下のurlより適切なanacondのバージョンを選択後、
https://www.anaconda.com/products/individual#linux
適切なバージョンのanacondaをインストール
ちゃんと構築できているか確認
pythonが利用できるようになったら、barn-owlのソースコードのトップディレクトリ(README.mdと同じディレクトリ)に仮想環境を作成しましょう。(具体的な方法は後述)
※依存関係があるパッケージに変更があった場合には
でyamlファイルを更新すること。
参考: https://qiita.com/itisyuu/items/dafa535adc8197208af1
apache2をインストールする
mod_wsgiのインストール
(mod-wsgiとは、PythonのプログラムをApache HTTP Serverで動作させるためのモジュール)
(mod_wsgiはpythonのライブラリにある)
で現れてた文字列をコピーし
(自分の場合は、'/usr/lib/apache2/modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so')
の末尾に書き込む。
#apacheとDjangoを結びつける
でconfファイルを作成し
のような内容を書き込みます。各自環境に合わせてください。
以下をbarn-owl.confに記載
##起動確認
で設定ファイルを読みこみapacheを起動させる。
※以下のエラーが出る場合
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
要解決法
–––––––––––––––––––––––––––ここまで編集(20200628)–––––––––––––––––––––––––––
鍵がなければ、作成しましょう。
鍵を作成したら、クライアント側(Aimstarサーバー)に登録してください
次に、秘密鍵、公開鍵、サーバ証明書を作成・登録します。
barn-owlの初期設定のうち以下のものはCLIで実行します。
・マイグレーション
・スーパーユーザーの作成
まず、上述の仮想環境をアクティベートして、Djangoディレクトリに移動し、以下のコマンドを実行してください。
次にスーパーユーザーを作成します。
ユーザー名、パスワード、メールアドレスの入力を求められます。このうち、ユーザー名とパスワードはのちの手順で使用するので、控えておいてください。
メールアドレスを利用する機能は今のところ実装していないので、空欄にして構いません。
([例] username:aimstar, password:supreme)
以上の設定が終了したら、barn-owlを起動可能となります。
barn-owlはscriptsフォルダ内のserver-startup.sh というシェルスクリプトを使用して起動します。
barn-owl/scripts 内のserver.conf.sampleを参考に、server.confを作成してください。
少なくともipアドレスは書き換える必要があります。
server.confを書き換えたら、server-startup.shを実行してください。
ただし、server-startup.shとserver.confは改行コードがCR+LFになっている場合はエラーになるので、LFに変換して実行してください。
https://{id-address}:{port}/api-auth/login にアクセスできることを確認し、
先ほど作成したスーパーユーザーアカウントでログインしてください。
なお、nohupモードで起動した際に、停止したい場合にはプロセスIDを特定してkillする必要があります。
nohupモードで起動した際の起動結果は、scripts/nohup.outに出力されています。
また、正常起動しなかった場合は、エラーログがDjango/logディレクトリあるのでそちらを参照してください。
barn-owl起動後、ブラウザ上で「グループ」「ユーザー」を設定(作成)します。
「グループ」「ユーザー」作成後、外部から接続するためのclient_idとclient_secretが発行可能となります。
認証に必要な情報は「アプリケーション」という単位で発行しています。ここでの「アプリケーション」とは、barn-owl に対して、リクエストを投げる外部のソフトウェアのことであり、今回はAimstarが該当します。そのほかにも、開発者がデバッグ用にリクエストを投げる場合もアプリケーションの登録が必要です。
アプリケーションの登録をするために、前の手順で作成したユーザーでログインする必要があります。次のurlにアクセスしてください(もし、まだスーパーユーザーとしてログインしたままであれば、いったんログアウトしてください。)
https://{ip-address}:{port}/api-auth/login/
ログインしたら、click here をクリックし、以下の情報を入力します。
項目 | 内容 |
---|---|
Name | アプリケーション名。AimstarV75 |
Client id | 接続用id。書き換えないこと |
Client secret | 同上 |
Redirect urls | 空欄でよい |
Client type | Confidentialを選択する |
Authorization grant type | Resorce owner password-basedを選択する |
入力したらsave をクリックしてください。Client id とClient secret が接続するために必要な情報です。これらは控えておいてください。
AimstarからAPIを利用する場合であっても、そのほかの方法でAPIを利用する場合であっても必要な情報は以下の4つです。
Aimstarであれば、これらをaimstar+local.confに記述する必要があります。