継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Amazon SageMaker の XGBoost フレームワークチュートリアルを試して感じたこと

タダです.

Python もくもく自習室 #20 に参加してきました.もくもくでは Amazon SageMaker(以下,SageMaker)でモデル開発とデプロイを実践しました. retty.connpass.com

フレームワークXGBoost を使うことにしました.今後 Kaggle にチャレンジしたいのですが, XGBoost はよく使われるフレームワークという情報を見つけたため使ってみました.参考にさせてもらったのはこちらのチュートリアルです.今回はチュートリアルを終えて SageMaker を使う際の AWS 観点で注意すべき点をまとめます.

www.codexa.net

SageMaker とは

SageMaker は AWS機械学習サービスの1つで機械学習のモデル開発,トレーニング,デプロイが SageMaker で完結できるものになっています.国内での利用事例も増えつつあると感じており,昨日もちょうど dely さんの SageMaker を活用した寄稿記事がリリースされてました.AWS機械学習をするなら中核となるサービスと言えます.

aws.amazon.com

XGBoost とは

XGBoost は決定木を使った勾配ブースティングのオープンソースフレームワークになります.勾配ブースティングはアンサンブル学習の一種で,教師あり学習アルゴリズムです.

docs.aws.amazon.com

利用したデータセット

今回使ったデータセットは「Bank Marketing Data Set (銀行マーケティング・データセット」を使いました.カルフォルニア大学では様々なオープンデータを公開しているようです.同様にオープンデータを活用したチュートリアルは書評記事を書いた「機械学習の炊いたん。」でも MXNet フレームワークを使ったチュートリアルが解説されているので気になる方は購入を検討してみてください.

archive.ics.uci.edu

関連記事

sadayoshi-tada.hatenablog.com

AWS 観点で注意すべき点

ノートブックインスタンス,モデル訓練用インスタンス,モデルのデプロイ用インスタンスが存在する

今回のチュートリアルを行って初めて知ったのですが,ノートブックインスタンスのみでモデル開発とデプロイが完結するかと勘違いしていました.実際は,モデルの訓練,デプロイしホスティングするインスタンスが異なります.課金もそれぞれの利用時間当たりの料金がかかってきますので利用する際は料金表を参照ください.

aws.amazon.com

チュートリアルでは,モデルの訓練時は「ml.m4.xlarge」でモデルのデプロイとホスティングを「ml.c4.xlarge」で実施しました.なお、今回活用したチュートリアルでの利用料金はおよそ3~4ドルほどとのことです.お試しの料金として問題ない範囲かと思います.

また参考情報としてドキュメントで推奨のインスタンスタイプも紹介されているので参考になると思います.

docs.aws.amazon.com

訓練データの出力先の S3 バケット名について

SageMaker で訓練データで使う S3 を利用します.S3 バケットをモデル開発を行う前に構築しますが,試しに利用する目的であればバケット名に「SageMaker」,「Sagemaker」,「sagemaker」の文言をつければ SageMaker がデータの出力先として認識してくれます.というのも SagaMaker のノートブックインスタンスに付与される IAM ロールで指定されているためです.そのためバケット名に特にこだわりがない場合は以下のいずれかの文言を活用すると良いでしょう.

IAM ポリシー抜粋
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*sagemaker*",
                "arn:aws:s3:::*aws-glue*"
            ]
        }

XGBoost 専用のコンテナイメージのエンドポイントについて

モデルの訓練を行う際に ECR の所定のコンテナイメージを指定します.エンドポイントが既にあるのですが下記のように利用しています.アルゴリズムごとに ECR コンテナイメージが用意されているため利用用途に応じて選択ください.

※チュートリアルのコードを抜粋
containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',
              'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',
              'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',
              'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest',
             'ap-northeast-1': '501404015308.dkr.ecr.ap-northeast-1.amazonaws.com/xgboost:latest'}

参考情報

docs.aws.amazon.com

まとめ

今回は SageMaker を使ってモデル開発〜モデルのホスティングまで行う XGBoostチュートリアルを使って感じた SageMaker 利用時のAWS 観点で注意すべき点をまとめました.今回のチュートリアルで使ったのは S3,ECR でしたが他にも関連できるサービスはあるためこれから色々なサービスと組み合わせて使っていければと思います.

もくもくで扱えなかったもの

もくもく会で扱えなかったのですがネットで盛り上がっているディープラーニング入門 Chainer チュートリアルを今度やってみたい.

tutorials.chainer.org

AWS CDK CLI のバージョンアップを行う方法

タダです.

AWS CDK のバージョン0.33.0がリリースされました.

github.com

リリース情報

Bug Fixes

  • core: Fn.cidr should return a list and not a string (#2678) (9d2ea2a), closes #2671
  • cli: fix ts-node usage on Windows (#2660) (5fe0af5)
  • cli: make cdk docs open the new API reference (#2633) (6450758)
  • cli: correctly pass build args to docker build (#2634) (9c58d6f)
  • core: hide dependencyRoots from public API (#2668) (2ba5ad2), closes #2348
  • autoscaling: move lifecycle hook targets to their own module (#2628) (b282132), closes #2447
  • codepipeline: no longer allow providing an index when adding a Stage to a Pipeline. (#2624) (ce39b12)
  • codepipeline-actions: correctly serialize the userParameters passed to the Lambda invoke Action. (#2537) (ceaf54a)
  • cx-api: improve compatibility messages for cli <=> app (#2676) (38a9894)
  • ecs: move high level ECS constructs into aws-ecs-patterns (#2623) (f901313)
  • logs: move log destinations into 'aws-logs-destinations' (#2655) (01601c2), closes #2444
  • s3: move notification destinations into their own module (#2659) (185951c), closes #2445

Features

  • cli: decouple "synth" and "deploy" through cloud assemblies (#2636) (c52bcfc), closes #1893 #2093 #1954 #2310 #2073 #1245 #341 #956 #233 #2016
  • acm: allow specifying region for validated certificates (#2626) (1a7d4db)
  • apigateway: support for UsagePlan, ApiKey, UsagePlanKey (#2564) (203f114), closes #723
  • autoscaling: allow setting spotPrice (#2571) (d640055), closes #2208
  • cfn: update CloudFormation spec to v3.3.0 (#2669) (0f553ee)
  • cli: disable noUnusedLocals and noUnusedParameters from typescript templates (#2654) (b061826)
  • cloudformation: aws-api custom resource (#1850) (9a48b66)
  • cloudwatch: support all Y-Axis properties (#2406) (8904c3e), closes #2385

BREAKING CHANGES

  • logs: using a Lambda or Kinesis Stream as CloudWatch log subscription destination now requires an integration object from the @aws-cdk/aws-logs-destinations package.
  • codepipeline-actions: removed the addPutJobResultPolicy property when creating LambdaInvokeAction.
  • cli: --interactive has been removed
  • cli: --numbered has been removed
  • cli: --staging is now a boolean flag that indicates whether assets should be copied to the --output directory or directly referenced (--no-staging is useful for e.g. local debugging with SAM CLI)
  • assets: Assets (e.g. Lambda code assets) are now referenced relative to the output directory.
  • assert: SynthUtils.templateForStackName has been removed (use SynthUtils.synthesize(stack).template).
  • cx-api: cxapi.SynthesizedStack renamed to cxapi.CloudFormationStackArtifact with multiple API changes.
  • core: cdk.App.run() now returns a cxapi.CloudAssembly instead of cdk.ISynthesisSession.
  • s3: using a Topic, Queue or Lambda as bucket notification destination now requires an integration object from the @aws-cdk/aws-s3-notifications package.
  • autoscaling: using a Topic, Queue or Lambda as Lifecycle Hook Target now requires an integration object from the @aws-cdk/aws-autoscaling-hooktargets package.
  • codepipeline: the property atIndex has been removed from the StagePlacement interface.
  • aws-ecs: These changes move all L3 and higher constructs out of the aws-ecs module into the aws-ecs-patterns module. The following constructs have been moved into the aws-ecs-patterns module: EcsQueueWorkerService, FargateQueueWorkerService, LoadBalancedEcsService, LoadBalancedFargateService and LoadBalancedFargateServiceApplets.
  • cloudwatch: rename leftAxisRange => leftYAxis, rightAxisRange => rightYAxis, rename YAxisRange => YAxisProps.

AWS CDK CLI のバージョンアップ方法

ローカルの「AWS CDK CLI」のバージョンが0.30.0になっていたのですが,リリース情報に以下の記載もあったのでバージョンアップしてみました.今回はその対応時の情報をまとめます.

IMPORTANT: apps created with the CDK version 0.33.0 and above cannot be used with an older CLI version.

バージョンアップ前の情報

$ cdk  --version
0.30.0 (build 4740446)

npm-check-updates を使ってバージョンアップ方法を確認する

AWS CDK CLI」はnpmを使ってインストールしました.そのため npm パッケージの更新方法を確認していたところnpm-check-updatesを使うのが良さそうだと思い使ってみました.

github.com

参考記事

dackdive.hateblo.jp

npm-check-updatesの導入は以下の通りです.

$ npm i -g npm-check-updates
/usr/local/bin/ncu -> /usr/local/lib/node_modules/npm-check-updates/bin/ncu
/usr/local/bin/npm-check-updates -> /usr/local/lib/node_modules/npm-check-updates/bin/npm-check-updates
+ npm-check-updates@3.1.9
added 154 packages from 80 contributors in 10.035s

npm-check-updatesncuコマンドを使ってパッケージのアップデート確認が可能です.実行してみるとnpm -g install aws-cdk@0.33.0 でバージョンアップ可能なことが確認できます.

$ ncu -g aws-cdk
[====================] 1/1 100%

 aws-cdk  0.30.00.33.0

ncu itself cannot upgrade global packages. Run the following to upgrade all global packages:

npm -g install aws-cdk@0.33.0

ncuコマンドで確認したようにコマンドを実行しアップデートをかけてみます.バージョンが0.33.0になったことを確認できました.

$ npm -g install aws-cdk@0.33.0
npm WARN deprecated @aws-cdk/applet-js@0.33.0: Applets have been deprecated in favor of 'decdk'
/usr/local/bin/cdk -> /usr/local/lib/node_modules/aws-cdk/bin/cdk

> core-js@2.6.9 postinstall /usr/local/lib/node_modules/aws-cdk/node_modules/core-js
> node scripts/postinstall || echo "ignore"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)

+ aws-cdk@0.33.0
added 3 packages from 1 contributor, removed 7 packages and updated 25 packages in 31.781s
$ cdk --version
0.33.0 (build 50d71bf)

これで楽しい「AWS CDK CLI」ライフ実現に一歩近づきました.

まとめ

初めて「AWS CDK CLI」のバージョンアップ対応を行なったのでその方法をまとめました.npm-check-updates 使うとアップデート方法がすぐわかって簡単に対応できました.今後アップデート予定の方の何か参考になれば幸いです!

関連記事

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

AWS のスイッチロール情報を管理するのに役立つ「AWS Extend Switch Roles」

タダです.

AWS のアカウント利用においてマルチアカウントで開発,ステージング,本番など用途に応じてアカウントを切り替える場面があるかと思います.僕も業務で複数の AWS アカウントを切り替えて仕事するのですが,マネジメントコンソールで保存が効く接続先はデフォルトで「5つ」です.

docs.aws.amazon.com

5つ以上のアカウントを切り替えて仕事をする時都度アカウント情報を確認するのって煩わしいし不便ですよね.そこで「AWS Extend Switch Roles」です.これは Google ChromeFirefox のエクステンションなのですが,アカウント切り替えを楽に行うツールで僕もとても役に立ったので紹介します.

AWS Extend Switch Roles とは

AWS Extend Switch Roles」とは AWS マネジメントコンソールのスイッチロール のデフォルト表示が5つまでのところ設定したアカウント分表示してくれるツールになります.マルチアカウント運用業務にあたる方にとって有用なツールで,僕自身も業務でお世話になっています.

github.com

このツールを使うためにはブラウザの拡張機能(エクステンション)を導入する必要があります.

エクステンションの導入

早速エクステンションを導入していきます.普段 Google Chrome を使っているので Chrome Extensions を使いますが Firefox もあります. chrome.google.com

addons.mozilla.org

導入完了しますと,緑の鍵マークアイコンがリスト上に表示されます. f:id:sadayoshi_tada:20190528141049p:plain

アカウント切り替えの設定

スイッチロール の設定をしていくのも画面上から行えます.書式は AWS CLI のコンフィグと形式と似ています.「Configuration」欄に設定値を記載後、「Save」ボタンを押して適用します.合わせて「Hide original role history」のチェックボックスを有効化することをオススメします.この有効化により過去のスイッチロールの情報はキャッシュで保持しているものをブラウザ上に表示させず,「AWS Extend Switch Roles」で設定したスイッチロール 情報が表示されます.

f:id:sadayoshi_tada:20190528125222p:plain

docs.aws.amazon.com

設定例

[プロファイル名(例: dev)]
aws_account_id = アカウント番号(例: 123456789012)
role_name = スイッチロール 名(例: switchrole)

オプションパラメーターとして以下のものがあります.

  • region : スイッチロール 時のリージョンを指定できます
  • color : スイッチロールの色を指定可能で, RGB 16進値で指定できます
  • image: 指定された color 属性の上に使用する画像の URI を指定できます

設定例

[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadmin
color = ffaaee

[anotheraccount]
aws_account_id = 987654321987
role_name = anotherrole
region=ap-northeast-1

[athirdaccount]
aws_account_id = 987654321988
role_name = athirdrole
image = "https://via.placeholder.com/150"

設定後の AWS マネジメントコンソールに移動して確認してみます.僕の設定で8つアカウント設定を行なったのですが,設定したアカウント情報が表示されています.また5つ以上表示されていることも確認できました.

f:id:sadayoshi_tada:20190528141439p:plain

まとめ

AWS Extend Switch Roles」の紹介と設定方法についてまとめました.マルチアカウントの運用業務や開発業務などの利用があるかと思いますが,その際にこのツールを使ってみるのはいかがでしょうか.何か役立つことがあれば幸いです!

技術ネタに止まらない! 趣味の開発や採用まで豊富な AI のトピックを勉強できる「機械学習の炊いたん。」

タダです。

先日の技術書展6で購入した「機械学習の炊いたん。」を読了しました.本書では AI の技術ネタだけでなく,AI エンジニアの採用事情や趣味で深層学習(ディープラーニング)の環境を整えるステップアップの仕方まで AI 分野を様々な角度で解説しています.読了後の所感を含めて本書を紹介します.

booth.pm

本書の構成

本書は6章で構成されています.

本書で学べること

本書を通じて勉強できると感じたのは以下の通りです.

  • AWS SageMaker でのモデルの作り方とデプロイ
  • AI 開発の転職活動や採用活動事情
  • 深層学習の勉強を趣味で進めるためのステップアップ方法(Google Colaboratory から始めて自作マシンを組むところまで)
  • 強化学習やスパース推定の基礎的な解説(コードはなく数学や理論の解説が中心)

モデルの作成とデプロイの体験

@kirikei4さんによるAWS SageMaker での MXNetフレームワークを利用してモデルの開発とデプロイを行う方法を2章で画像とコードを使って解説されています.AWS で AI 開発を行う時の要になるサービス AWS SageMaker の使い方を一通り勉強できるコンテンツなので興味があっても触れていない人にオススメです.

また @kirikei4さんも触れていますが,AWS の良さは他のサービスとの連携を行うことでシナジー効果を得られます.単一で使うより本コンテンツを通じて開発,運用まで考えた使い方を行なっていけるようになるとより良い使い方ができるはずです.

今回は取り上げませんでしたが,LambdaなどのFaaS を使ったお手軽アプリの作成や Amazon Green Galss や IoT Core などど連携したエッジへのデプロイなど,組み合わせ方がたくさんあります.

関連情報

aws.amazon.com

aws.amazon.com

AI 分野の転職や採用事情

@emergentさんが採用担当になって AI 業界における AI 開発者に応募する時の考慮点や採用者目線での意見を3章で解説してくれています.特に応募者の考慮点は僕も気になっていた部分です.応募者の経歴と採用側の期待とのギャップが描写されていますし,企業側も期待を伝えるべきことが記載されています.

現状とてもアツい転職市場の分野かと思います.応募者,採用する企業が双方幸せになるための参考になる情報と思うので転職を考えていたり,人事担当の方も気になれば見てみて欲しい内容です.

深層学習の趣味での勉強ステップアップ方法

@tomo-makesさんによる深層学習の勉強ステップアップ方法の解説が4章です.どんな分野でもまずは手軽に始められるところから少しずつステップアップしていくのが勉強を継続するために必要です.手始めの勉強環境として「Google Colaboratory」からスタートし, GCP のサービスの利用,最終的に自作マシンを組むところまで進んだ実体験まで触れられています.

勉強状況に応じて開発環境も適宜変更していくハウツーの情報は参考になります.これから勉強していく方にとって有益な情報がまとめられています.

関連情報

colab.research.google.com

cloud.google.com

cloud.google.com

cloud.google.com

関連記事

Google Colaboratory」については以下の記事で触れています.

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

強化学習やスパース推定の基礎的な数理観点の解説

@sonodanoさんと @small_mt さんによる 逆強化学習とスパース推定の解説ページが5,6章です.これまでの章とは異なり数理的な解説が中心です.僕は数式が理解できずなため関連資料のものを使って何度も繰り返し読もうと思います.僕のように数式が苦手な方は周辺情報と合わせて勉強しつつ読み進めるのがオススメです.

関連資料

www.slideshare.net

www.slideshare.net

まとめ

  • 豊富な AI トピックを扱った「機械学習の炊いたん。」を紹介しました.
  • 総ページがP122でしたが,僕は 3時間 ほどで読了できる内容でした.
  • AI 分野が初めてでも1章から4章までは AI 分野でどういった技術か,どんな開発をするのかなど勉強になることが多いです.
    • 後半は数理分野の勉強が中心となるため数式苦手な方は関連情報とゆったり勉強していくと良いと思いました.

「Effective DevOps」オンライン輪読会 第2回開催レポート

タダです。

challenge-every-month の Slack メンバーで 「Effective DevOps」のオンライン輪読会をはじめました。

Effective DevOps ―4本柱による持続可能な組織文化の育て方

Effective DevOps ―4本柱による持続可能な組織文化の育て方

方針や輪読会の概要は @kojirock さんがまとめてくださっているので参照ください.5/19 が2回目の開催で僕が担当したのでブログに輪読会開催レポートをまとめます.

kojirooooocks.hatenablog.com

担当章について

今回の範囲は1章~4章分になります.DevOps とはどんな概念か,DevOps の歴史, DevOps に関するツールや手法が紹介されました.DevOps はツールや手法に目が行きがちですが,「人と人の協調や相互理解」,「組織の持続的成長に関わる文化的フレームワーク」であることが本書で重要なテーマになっています.

  • 1章 大局を見る
  • 2章 devopsとは何か
  • 3章 devopsの歴史
  • 4章 基本的な用語と概念

資料

資料はこちらです.

関連資料

DevOps の考え方の資料で本に書かれたことともリンクしているため見たことない方は一読することをお勧めします.

www.slideshare.net

昨年参加したはてなさんとペパボさんの勉強会で各社の事例も参考になると思います.

sadayoshi-tada.hatenablog.com

補足資料

Microsoft の牛尾さんの DevOps に関する学習コンテンツ紹介記事です.

simplearchitect.hatenablog.com

DevOps について技術的側面と文化的側面で簡潔に動画で解説してくれていてわかりやすいです.

www.youtube.com

まとめ

第2回目の輪読会で扱った資料と関連情報のまとめを行いました.オンラインの輪読会は初の試みのため探り探りですが,本の中身だけでなく現場の話を @kojirock さんと @kdnakt さんとわいわい話しながら1時間が終わりました. 開発手法の話から僕がモブプロに興味があって一緒にやらせてもらえないかと相談したら快く承諾してくれたので輪読以外も研鑽していきたい!

次回

次回は @kojirock さんの担当です.担当章が5,6章分になります.