Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Google Cloud ML を用いた機械学習基盤の構築と運用/pepabo_ml_infrastructure_starchart
monochromegane
January 28, 2017
Technology
4
4.1k
Google Cloud ML を用いた機械学習基盤の構築と運用/pepabo_ml_infrastructure_starchart
GCPUG Fukuoka 5th 〜Machine Learning 祭〜
https://gcpugfukuoka.connpass.com/event/46049/
monochromegane
January 28, 2017
Tweet
Share
More Decks by monochromegane
See All by monochromegane
迅速な学習機構を用いて逐次適応性を損なうことなく非線形性を扱う文脈付き多腕バンディット手法/extreme_neural_linear_bandits
monochromegane
0
220
再帰化への認知的転回/the-turn-to-recursive-system
monochromegane
0
310
仮想的な探索を用いて文脈や時間の経過による番狂わせにも迅速に追従する多腕バンディット手法/wi2_lkf_bandits
monochromegane
0
310
Synapse: 文脈と時間経過に応じて推薦手法の選択を最適化するメタ推薦システム/smash21-synapse
monochromegane
0
230
なめらかなシステムと運用維持の未来/dicomo2021-coherently-fittable-system
monochromegane
1
9.3k
go:embedでExplainable Binaryを作る/fukoukago17_go_code_embedding
monochromegane
2
180
非定常な多腕バンディット問題において効率的に変化を察知する方式の検討/wsa8_predictive_exploratory_model
monochromegane
0
2.2k
変化検出と要約データ構造を用いた利用者の嗜好の変化に迅速に追従する多腕バンディット手法/iots2020-adaptive-linear-mab
monochromegane
0
620
嗜好伝達コミュニケーションの効率化を目指した伝達方式の検討/wsa7_local_preference
monochromegane
0
2.6k
Other Decks in Technology
See All in Technology
エンタープライズ領域でのブロックチェーン・インターオペラビリティの発展 / Enterprise Blockchain Interoperability
gakumura
0
120
230125 古いタブレットの活用 かーでぃさん
comucal
PRO
0
1k
Deep dive in Reserved Instance ~脳死推奨量購入からの脱却~
kzkmaeda
0
380
20230123_FinJAWS
takuyay0ne
0
110
Multi-Cloud Gatewayでデータを統治せよ!/ Data Federation with MCG
tutsunom
1
140
2年で10→70人へ! スタートアップの 情報セキュリティ課題と施策
miekobayashi
1
200
OpenShiftのリリースノートを整理してみた
loftkun
2
220
AKIBA.SaaS資料
yasumuusan
0
160
DNS権威サーバのクラウドサービス向けに行われた攻撃および対策 / DNS Pseudo-Random Subdomain Attack and mitigations
kazeburo
5
1.1k
OpenShift.Run2023_create-aro-with-terraform
ishiitaiki20fixer
1
150
証明書って何だっけ? 〜AWSの中間CA移行に備える〜
minorun365
3
2k
日本ディープラーニング協会主催 NeurIPS 2022 技術報告会講演資料
tdailab
0
980
Featured
See All Featured
How to Ace a Technical Interview
jacobian
270
21k
How To Stay Up To Date on Web Technology
chriscoyier
779
250k
A Philosophy of Restraint
colly
193
15k
Building Better People: How to give real-time feedback that sticks.
wjessup
346
17k
Debugging Ruby Performance
tmm1
67
11k
What's in a price? How to price your products and services
michaelherold
233
9.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
56
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
8
3.2k
The Brand Is Dead. Long Live the Brand.
mthomps
48
2.9k
KATA
mclloyd
12
9.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
318
19k
Testing 201, or: Great Expectations
jmmastey
25
5.7k
Transcript
ࡾ༔հ / Pepabo R&D Institute, GMO Pepabo, Inc. 2017.01.28 GCPUG
Fukuoka 5th ʙMachine Learning ࡇʙ Google Cloud MLΛ༻͍ͨ ػցֶशج൫ͷߏஙͱӡ༻
ϓϦϯγύϧΤϯδχΞ ࡾ༔հ!NPOPDISPNFHBOF ϖύϘݚڀॴݚڀһ IUUQCMPHNPOPDISPNFHBOFDPN
ࠓ͓͢͠Δ͜ͱ •ϖύϘݚڀॴͱɺͳΊΒ͔ͳγεςϜ •ͳΊΒ͔ͳγεςϜΛ࣮ݱ͢Δػցֶशج൫ •Google Cloud ML ͱ StarChart Λ༻͍ͨػցֶशج ൫ͷӡ༻
https://icons8.com/
ϖύϘݚڀॴ
ϖύϘݚڀॴ ུশʮϖύݚʯ ɺࣄۀΛࠩ ผԽͰ͖Δٕज़Λ࡞Γग़ͨ͢ΊʹʮͳΊΒ͔ ͳγεςϜʯͱ͍͏ίϯηϓτͷԼͰݚڀ։ ൃʹऔΓΉ৫Ͱ͢ɻ ϖύϘݚڀॴʹ͍ͭͯ http://rand.pepabo.com/
ͳΊΒ͔ͳγεςϜ
γεςϜͷ֤ཁૉ͕໌ࣔతͳૢ࡞Λܦͣʹಛ Λೝࣝ͠ɺͦͷಛؔੑʹج͖ͮɺͦ ͷ࣌ʑͷঢ়گʹԠͨ͡࠷దͳαʔϏεΛఏڙ ͢Δ ͳΊΒ͔ͳγεςϜ http://rand.pepabo.com/
ػցֶशͱɺͳΊΒ͔ͳγεςϜ
ྫ͑
WebαʔϏεͷΞΫηεΛ༧ଌ͢Δ •ैྔ՝ۚͷԾϦιʔεӡ༻ʹ͓͍ͯ࠷దͳϦιʔεधཁͷ༧ ଌίετΧοτʹͭͳ͕Δ •WebαʔϏεͷϦιʔεधཁϦΫΤετॲཧ݅ɺͭ·ΓΞ Ϋηεͱ૬͕ؔ͋Δͣ •Ϧιʔεͷ૿ݮʹ͋Δఔͷ͕͔͔࣌ؒΔͨΊɺϦΞϧλΠ ϜͰͳ͘ҰఆִؒͰͷΞΫηε༧ଌͰेͱߟ͑Δ
WebαʔϏεͷΞΫηεΛ༧ଌ͢Δ ΞΫηεΛ༧ଌͰ͖ΔΑ͏ʹͳΕ ɺϐʔΫλΠϜʹ͋Θͤͨݟੵ Γ͔Β࣌ؒ͝ͱͷ࠷దʢͱࢥΘΕ ΔʣݟੵΓ͕ՄೳʹͳΔ
LSTM Long Short Term Memory
WebαʔϏεͷΞΫηεΛ༧ଌ͢Δ -45.Λ༻͍ͨΞΫηε༧ଌ w ೖྗظ ͷΞΫηεͱΧϨϯμʔใ w ग़ྗ༧ଌͨ͠ظઌͷΞΫηε w ظઌͷ༧ଌʹલճͷ༧ଌΛೖྗʹؚΊͳ͕Β
ظઌ·Ͱͷ༧ଌ w ࠨਤिؒΛ܁Γฦ͠༧ଌ IUUQSBOEQFQBCPDPNBSUJDMFNPOPDISPNFHBOF
ϖύݚ
ΞΧσϛοΫͳਫ४ʹ͓͚Δ৽نੑɾ༗ޮੑɾ ৴པੑΛٻ͢ΔݚڀΛߦ͏ͱͱʹɺݚڀ ։ൃٕͨ͠ज़Λ࣮ࡍͷγεςϜͱ࣮ͯ͠ɾ ఏڙ͢Δ͜ͱΛ௨ͯ͠ɺࣄۀͷʹߩݙ͠ ·͢ɻ ϖύϘݚڀॴʹ͍ͭͯ http://rand.pepabo.com/
Service meets ML. ͬͯφϯϘ
ػցֶशج൫ʹ ٻΊΒΕΔͷ
ྫ͑ɺΞΫηε༧ଌΛαʔϏεͰ͏ Users Service log rack-bigfoot Bigfoot Activity ML Platform training
dataset train input data prediction tune Access count prediction and schedule scaling
ྫ͑ɺΞΫηε༧ଌΛαʔϏεͰ͏ Users Service log rack-bigfoot Bigfoot Activity ML Platform training
dataset train input data prediction tune Access count prediction and schedule scaling ͍͔ͳΔಛΛ͔࣋ͭΛ ਫ਼៛ʹೝࣝ͢Δ ਓؒʹ໌ࣔతͳૢ࡞Λ ՝͞ͳ͍ ͦͷ࣌ʑͷঢ়گʹԠͯ͡ ࠷దͳαʔϏεΛఏڙ͢Δ
OK, ͳΊΒ͔
ػցֶशج൫ͷཁ݅Λߟ͑Δ ϩά%#ͳͲͷαʔϏεࢿ࢈ͱ࿈ܞͰ͖Δ ൺֱత༰қʹϞσϧͷߏஙͱࢼߦ͕ߦ͑Δ ֶश݁ՌΛར༻͢ΔͨΊͷखஈͱͯ͠"1*Λఏڙ͢Δ ֶश݁ՌͷϩʔΧϧར༻͕Ͱ͖Δͱͳ͓Α͍
্هͷΈ͕εέʔϥϒϧͰ͋Δ͜ͱ
Google Cloud ML Ͱߟ͑Δ ೖग़ྗ͕$MPVE4UPSBHFܦ༝ ܇࿅ϓϩάϥϜͱͯ͠5FOTPS'MPXΛ࠾༻ ΦϯϥΠϯ༧ଌαʔϏεʹΑΓϞσϧͷ"1*Խ
ֶश݁Ռ$MPVE4UPSBHFʹอଘɺϩʔΧϧͰͷར༻ ࢄܕͷτϨʔχϯάΠϯϑϥͱෛՙࢄαʔϏεͱͷ࿈ܞ ※ ݕ౼ʹؔ͢Δৄࡉ: http://rand.pepabo.com/article/2017/01/18/pepabo-ml-platform-and-workflow/
ػցֶशج൫Λ ӡ༻͢Δ
ֶश݁ՌӬଓతͳͷͰͳ͍ expose Create 1. ϞσϧΛߏஙͯ͠ެ։͢Δ 2. αʔϏεࢿ࢈ͷมԽʹ߹ΘͤͯϞσϧΛվળ͢Δ tune
ͦͷϞσϧɺαʔϏεʹఏڙͯ͠େৎʁ expose create ֶशͨ͠༰͕֬ೝͳ͘ద༻͞Εͯ͠·͏͜ͱͰҙਤ͠ͳ͍݁ Ռ͕ར༻͞ΕΔ͜ͱΛ͍͗ͨ tune Ϟσϧֶश͠ͳ͓ͨ͠ͷͰɺ APIͷ݁Ռ͕มΘͬͯ·͢ ਫ਼Լ͕ͬͯΔؾ͕͢Δʁ ग़ྗͷ࣍ݩมΘͬͯͳ͍ʁ
ͦͷϞσϧɺαʔϏεʹఏڙͯ͠େৎʁ expose create ֶशͨ͠༰͕֬ೝͳ͘ద༻͞Εͯ͠·͏͜ͱͰҙਤ͠ͳ͍݁ Ռ͕ར༻͞ΕΔ͜ͱΛ͍͗ͨ -> Ϟσϧͷόʔδϣϯཧ tune Ϟσϧֶशͯ͠৽όʔδϣϯ ͭͬͯ͘·͢ɻସ͍͍Ͱ͔͢ʁ
͍͖ͳΓมΘΒͳͯ͘ศར ͚ͩͲɺมߋ༰͕Θ͔ΒΜͳʁ default
ͦͷϞσϧɺαʔϏεʹఏڙͯ͠େৎʁ expose create ֶशͨ͠༰͕֬ೝͳ͘ద༻͞Εͯ͠·͏͜ͱͰҙਤ͠ͳ͍݁ Ռ͕ར༻͞ΕΔ͜ͱΛ͍͗ͨ -> Ϟσϧͷίʔυཧ tune Ϟσϧͷ৽όʔδϣϯɺมߋ༰ͷ ϨϏϡʔ͓ئ͍͠·͢ʂ
LGTM!!! όʔδϣϯΓସ͑·͢ʂʂ default management
StarChart https://github.com/monochromegane/starchart
StarChart is a tool to manage Google Cloud Machine Learning
training programs and model versions. StarChart
StarChart Train job, model default version Train programs and model
versions on GitHub train, expose, apply StarChart • όʔδϣϯཧͷସʹ͓͚Δஅج४ͱͳΔ܇࿅ϓϩάϥϜɺύϥϝλɺδϣϒ ใ·ͰؚΊͯίʔυͰཧ • ֶश࣌ͷδϣϒIDCloud Storageͷύεɺόʔδϣϯʹඥͮ͘ύϥϝλใͷऔ ಘʹ·ͭΘΔCloud MLͷࡉ͔ͳ͍উखվળ
Let’s try
DCGAN on Cloud ML using StarChart
DCGAN TensorFlowʹΑΔDCGANͰΞΠ υϧͷإը૾ੜ http://memo.sugyan.com/entry/20160516/1463359395
܇࿅ϓϩάϥϜΛGitཧ͢Δ . !"" dcgan #"" setup.py !"" trainer #"" __init__.py
#"" dcgan.py !"" task.py Ϟσϧ໊ͷԼʹύοέʔδߏʹͳ ΔΑ͏ʹ܇࿅ϓϩάϥϜΛஔ ґଘύοέʔδ͕͋Δ߹ɺ setup.pyΛ४උ ࠓճface-generatorͷdcgan.pyͱ main.pyΛར༻ https://github.com/sugyan/face-generator
܇࿅ϓϩάϥϜΛδϣϒͱͯ͠ొ $ starchart train \ -m dcgan \ # MODEL_NAME
-M trainer.task \ # MODULE_NAME -- \ --train_dir=TRAIN_PATH/model \ # YOUR_TRAIN_PARAMS --images_dir=TRAIN_PATH/images \ --data_dir=gs://$BUCKET_NAME/data/dcgan • ύοέʔδϯάɺCloud StorageͷΞοϓϩʔυɺδϣϒొΛ࣮ߦ • `TRAIN_PATH`Cloud Storage্ʹδϣϒ͝ͱʹ࡞͞ΕΔσΟϨΫτϦ໊ʹղऍ • ϓϩδΣΫτIDɺϦʔδϣϯɺΫϨσϯγϟϧdirenvܦ༝ͷڥมࢦఆ͕ศར
δϣϒͷ࣮ߦΛͭ $ starchart state -m dcgan jobId: dcgan_20170125191521 (FAILED) •
δϣϒIDͱεςʔλεΛ֬ೝ • ϩάදࣔػೳະ࣮
FAILED??
܇࿅ϓϩάϥϜΛ$MPVE.-ʹରԠͤ͞Δ import os os.listdir() os.mkdir(path) os.path.exists() with open(filename, 'wb') as
f: • δϣϒ࣮ߦ࣌ͷFileIOCloud StorageΛରͱ͢Δ • tensorflow.python.lib.io.file_ioύοέʔδΛ͏͜ͱͰϩʔΧϧύεࢦఆɺCloud Storageࢦఆ(gs://)Λಁաతʹѻ͑Δ • ύεࢦఆίϚϯυϥΠϯҾͰͤΔΑ͏࣮͓ͯ͘͠ͱศར from tensorflow.python.lib.io import file_io file_io.list_directory() file_io.create_dir(path) file_io.file_exists() with file_io.FileIO(filename, 'w') as f:
܇࿅ϓϩάϥϜΛδϣϒͱͯ͠ొ $ starchart train \ -m dcgan \ # MODEL_NAME
-M trainer.task \ # MODULE_NAME -- \ --train_dir=TRAIN_PATH/model \ # YOUR_TRAIN_PARAMS --images_dir=TRAIN_PATH/images \ --data_dir=gs://$BUCKET_NAME/data/dcgan
δϣϒͷ࣮ߦΛͭ $ starchart state -m dcgan jobId: dcgan_20170125194440 (SUCCESSED) jobId:
dcgan_20170125191521 (FAILED) • δϣϒIDͱεςʔλεΛ֬ೝ
ϞσϧΛެ։͢Δ $ starchart expose -m dcgan • ޭͨ͠δϣϒΛݩʹϞσϧΛొ • Ϟσϧొ࣌ʹόʔδϣϯొͯ͠༧ଌαʔϏεAPIͱͯ͠ެ։
• όʔδϣϯ໊ v + δϣϒ໊ model v20170125194440 (default) Cloud ML & Storage
Not working…
༧ଌαʔϏε"1*ͷΈʢٖࣅίʔυʣ request_params = {'instances': [{'sample_inputs': np.zeros((1, 40)).tolist()}]} def feed_from_request(request, tensor_keys):
feed = {} request_keys = request['instances'][0].keys() for key in request_keys: feed[tensor_keys[key]] = [instance[key] for instance in request['instances']] return feed with tf.Session() as sess: new_saver = tf.train.import_meta_graph(‘TRAIN_PATH/model/export.meta’) new_saver.restore(sess, ‘TRAIN_PATH/model/export’) tensor_keys = json.loads(tf.get_collection('inputs')[0]) feed = feed_from_request(request_params, tensor_keys) op = json.loads(tf.get_collection('outputs')[0]) result = sess.run(op, feed_dict=feed) print(result) ֶश݁Ռͷ.FUB(SBQIΛ෮ݩ ίϨΫγϣϯ JOQVUT ͷςϯι ϧͱ"1*ϦΫΤετύϥϝλΛ ඥ͚ ίϨΫγϣϯ PVUQVUT ͷςϯ ιϧΛΦϖϨʔγϣϯͱͯ͠ඥ ͚ͨGFFEΛҾʹ࣮ߦ
܇࿅ϓϩάϥϜΛ"1*ʹରԠͤ͞Δ saver.save(sess, os.path.join(FLAGS.train_dir, 'export')) • APIͰར༻͢ΔͨΊɺ࠷ऴͷֶश݁ՌΛΤΫεϙʔτ͢Δ • ΤΫεϙʔτ໊exportͰͳ͚ΕͳΒͳ͍ •
StarChartͷ߹ɺ`TRAIN_PATH/model/export` ͱͯ͠ग़ྗ͠ͳ͚ΕͳΒͳ͍
• ίϨΫγϣϯʹೖྗ༻ςϯιϧΛՃɻग़ྗςϯιϧͷ࣮ߦ࣌ʹfeed_dictͱͯ͠ ͢ύϥϝλΛࢦఆ • ίϨΫγϣϯʹग़ྗ༻ςϯιϧΛՃɻ༧ଌαʔϏεAPI࣮ߦ࣌ͷΦϖϨʔγϣϯ Λࢦఆ • ग़ྗ༻ςϯιϧʹ `tf.image.encode_jpeg`Λ͏ͱInternal Server
Error ͩͬͨͷͰtf.reshape(tf.squeeze(image, [0]), [1, -1]) ͱͨ͠ # Input sample_inputs = tf.placeholder(tf.float32, shape=(None, 1, dcgan.z_dim)) tf.add_to_collection('inputs', json.dumps({'sample_inputs': sample_inputs.name})) # Output sample_outputs = dcgan.sample_image_vectors(1, 1, inputs=sample_inputs[0]) tf.add_to_collection('outputs', json.dumps({'sample_outputs': sample_outputs.name})) ܇࿅ϓϩάϥϜΛ"1*ʹରԠͤ͞Δ
܇࿅ϓϩάϥϜΛδϣϒͱͯ͠ొ $ starchart train \ -m dcgan \ # MODEL_NAME
-M trainer.task \ # MODULE_NAME -- \ --train_dir=TRAIN_PATH/model \ # YOUR_TRAIN_PARAMS --images_dir=TRAIN_PATH/images \ --data_dir=gs://$BUCKET_NAME/data/dcgan
δϣϒͷ࣮ߦΛͭ $ starchart state -m dcgan jobId: dcgan_20170125201233 (SUCCESSED) jobId:
dcgan_20170125194440 (SUCCESSED) jobId: dcgan_20170125191521 (FAILED) • δϣϒIDͱεςʔλεΛ֬ೝ
ϞσϧΛެ։͢Δ $ starchart expose -m dcgan model v20170125194440 (default) Cloud
ML & Storage v20170125201233
ϞσϧϑΝΠϧΛGitཧ͢Δ . #"" dcgan $ #"" setup.py $ !"" trainer
$ #"" __init__.py $ #"" dcgan.py $ !"" task.py !"" dcgan.json exposeͨ݁͠Ռ͕`Ϟσϧ໊.json`ʹอ ଘ͞ΕΔɻσϑΥϧτόʔδϣϯͷ ସʹ͏ͷͰ͜ΕGitཧͱ͢Δ
ϞσϧϑΝΠϧΛGitཧ͢Δ { "model": "MODEL_NAME", "versions": [ { "version": { "name":
"projects/PROJECT_ID/models/MODEL_NAME/versions/v20170111170842", "deploymentUri": "gs://PROJECT_ID-ml/MODEL_NAME/20170111170842/model", "createTime": "2017-01-11T09:12:54Z", "job": { "jobId": "MODEL_NAME_20170111170842", "trainingInput": { "packageUris": [ "gs://PROJECT_ID-ml/MODEL_NAME/20170111170842/packages/trainer-0.0.0.tar.gz" ], "pythonModule": "trainer.task", "args": [ "--model_dir=gs://PROJECT_ID-ml/MODEL_NAME/20170111170842/model", "--train_dir=gs://PROJECT_ID-ml/MODEL_NAME/20170111170842/train", ], "region": "us-central1" }, "createTime": "2017-01-11T08:08:49Z", "startTime": "2017-01-11T08:13:55Z", "endTime": "2017-01-11T08:40:55Z", "state": "SUCCEEDED", "trainingOutput": { "consumedMLUnits": 0.45 } }, "isDefault": true } } ] } "1*όʔδϣϯʹඥͮ͘δϣϒ ࣮ߦ࣌ύϥϝλɺσϑΥϧτ όʔδϣϯ͔Ͳ͏͔֬ೝͰ͖Δ
༧ଌαʔϏε"1*Λ͏ project = 'project-123456' model = 'dcgan' version = 'v20170125194440'
credentials = GoogleCredentials.get_application_default() ml = discovery.build('ml', 'v1beta1', credentials=credentials) body = {'instances': [{'sample_inputs': np.zeros((1, 40)).tolist()}]} request = ml.projects().predict(name='projects/{}/models/{}/versions/{}'.format(project, model, version), body=body) try: response = request.execute() output = response['predictions'][0]['sample_outputs'] with tf.Session() as sess: image = sess.run(tf.image.encode_jpeg(tf.reshape(tf.constant(output, dtype=tf.uint8), [96, 96, 3]))) with file_io.FileIO('out.jpg', 'w') as f: f.write(image) except errors.HttpError as err: print(err._get_reason())
It works !!
ϞσϧͷσϑΥϧτόʔδϣϯΛมߋ͢Δ $ starchart apply -m dcgan model v20170125194440 Cloud ML
& Storage v20170125201233 (default) • ϞσϧϑΝΠϧΛฤू͠ɺσϑΥϧτͱ͍ͨ͠όʔδϣϯͷ `isDefault` Λ true ʹɻ • ͜ͷ࣌ͷ܇࿅ϓϩάϥϜͱϞσϧϑΝΠϧΛPullRequestͱ͢Δ • ϨϏϡʔͰσϑΥϧτόʔδϣϯͷج४Λຬ͍ͨͯͨ͠ΒϚʔδͯ͠apply
4UBS$IBSUʹΑΔӡ༻ͷ͓͞Β͍ •Ϟσϧ͝ͱͷ܇࿅ϓϩάϥϜΛGitཧ •train -> expose -> ϨϏϡʔ -> apply Λ܁Γฦ͢
Easy & Useful
·ͱΊ
·ͱΊ •ػցֶशΛαʔϏεར༻͢ΔͨΊʹػցֶशج൫Λݕ ౼ͨ͠ •Google Cloud MLʹΑΔߏஙɺӡ༻ΛߦͬͯΈͨ •ෆศͳStarChartͰվળͨ͠ •ػցֶशͰαʔϏεվળ͠Α͏ʂʂ
͓ΘΓ
ϖύϘΧϨοδظੜืूத ʙԬͰ׆༂͍ͨ͠ʂ8FCΞϓϦέʔγϣϯΤϯδχΞʙ ࠷৽ͷ࠾༻ใΛνΣοΫˠ
[email protected]