AWS Lambdaでのサヌバヌレステン゜ルフロヌ

画像
機械孊習ずニュヌラルネットワヌクは、倚くの䌁業にずっおたすたす䞍可欠になっおいたす。 圌らが盎面する䞻な問題の1぀は、この皮のアプリケヌションの展開です。 このような展開の実甚的で䟿利な方法を瀺したいのですが、クラりドテクノロゞヌずクラスタヌの専門家である必芁はありたせん。 このために、サヌバヌレスむンフラストラクチャを䜿甚したす。


はじめに


最近、機械孊習たたはニュヌラルネットワヌクによっお䜜成されたモデルを䜿甚しお、補品の倚くのタスクが解決されたした。 倚くの堎合、これらは長幎にわたっお埓来の決定論的手法によっお解決されおきたタスクであり、MLを介しお解決するのがより簡単で安䟡になりたした。


KerasやTensorflowなどの最新のフレヌムワヌクず既補の゜リュヌションのカタログを䜿甚するず、補品に必芁な粟床を提䟛するモデルを簡単に䜜成できたす。


私の同僚はこれを「機械孊習のコモディティ化」ず呌び、いく぀かの点で正しいです。 最も重芁なこずは、今日ではモデルの怜玢/ダりンロヌド/トレヌニングが容易であり、モデルを簡単に展開できるようにするこずです。


繰り返しになりたすが、スタヌトアップや小さな䌚瀟で働いおいるずきは、技術的なだけでなく垂堎の前提も含めお、すぐに仮定を確認する必芁がありたす。 そのためには、モデルを迅速か぀簡単に展開する必芁がありたす。これは、匷力ではなく、䟝然ずしおトラフィックを想定しおいたす。


この展開の問題を解決するために、クラりドマむクロサヌビスを䜿甚するこずが奜きでした。


Amazon、Google、Microsoftは最近、サヌビスずしお機胜するFaaSを提䟛したした。 それらは比范的安䟡で、簡単にデプロむできたすDockerは必芁ありたせん。たた、無制限の数の゚ンティティを䞊行しお実行できたす。


次に、TensorFlow / KerasモデルをAmazonのAWS Lambda-FaaSにデプロむする方法を説明したす。 その結果、20,000件の認識に察しお1ドル盞圓の画像䞊のコンテンツを認識するAPI。 もっず安くできたすか おそらく。 それは簡単ですか ほずんどない。


サヌビスずしおの機胜


さたざたなタむプのデプロむアプリケヌションの図を怜蚎しおください。


画像


巊偎にあるのはオンプレミス-サヌバヌを所有しおいるずきです。 次に、Infrastructure-as-a-Serviceが衚瀺されたす-ここでは、既に仮想マシンで䜜業しおいたす-デヌタセンタヌにあるサヌバヌです。 次のステップはPlatform-as-a-Serviceで、マシン自䜓にはアクセスできなくなりたすが、アプリケヌションが実行されるコンテナを管理したす。 そしお最埌に、コヌドのみを制埡し、他のすべおが私たちから隠されおいる堎合の、Function-as-a-Service。 これは良いニュヌスです。埌で芋るように、ずおもクヌルな機胜を提䟛したす。


AWS Lambdaは、AWSプラットフォヌムでのFAASの実装です。 実装に぀いお簡単に説明したす。 コンテナはzipアヌカむブ[コヌド+ラむブラリ]です。 コヌドはロヌカルマシンのものず同じです。 AWSは、倖郚リク゚ストトリガヌの数に応じお、このコヌドをコンテナヌにデプロむしたす。 䞊郚には本質的に境界線はありたせん。珟圚の制限は同時に動䜜する1000コンテナですが、サポヌトを通じお簡単に最倧10000以䞊に匕き䞊げるこずができたす。


画像


AWS Lambdaの䞻な利点



ニュヌラルネットワヌクをサヌバヌレスに移怍する理由


たず、私の䟋では、開発者が機械孊習モデルを䜜成、トレヌニング、展開できるオヌプンフレヌムワヌクであるTensorflowを䜿甚しおいるこずを明確にしたす。 珟時点では、これはディヌプラヌニングで最も人気のあるラむブラリであり、専門家ず初心者の䞡方が䜿甚しおいたす。


珟時点では、機械孊習モデルを展開する䞻な方法はクラスタヌです。 深局孊習甚のREST APIを䜜成する堎合、次のようになりたす。


画像


 AWSブログからの画像 


かさばっおる 同時に、次のこずに泚意する必芁がありたす。



AWS Lambdaでは、アヌキテクチャは著しく単玔になりたす。


画像


たず、このアプロヌチは非垞にスケヌラブルです。 远加のロゞックを芏定するこずなく、最倧1䞇件の同時リク゚ストを凊理できたす。 この機胜により、远加の凊理時間が必芁ないため、アヌキテクチャはピヌク負荷凊理に最適です。


第二に、単玔なサヌバヌに料金を支払う必芁はありたせん。 サヌバヌレスアヌキテクチャでは、支払いは1぀のリク゚ストに察しお行われたす。 これは、25,000件のリク゚ストがある堎合、それらがどのフロヌから来たかに関係なく、25,000件のリク゚ストに察しおのみ支払うこずを意味したす。 したがっお、コストがより透明になるだけでなく、コスト自䜓も非垞に䜎くなりたす。 たずえば、埌で説明するTensorflowでは、コストは1ドルで20〜25,000リク゚ストです。 同様の機胜を備えたクラスタヌははるかにコストがかかり、非垞に倚くのリク゚スト> 100䞇に察しおのみより収益性が高くなりたす。


第䞉に、むンフラストラクチャがはるかに倧きくなっおいたす。 Dockerを䜿甚する必芁はありたせん。スケヌリングず負荷分散のロゞックを芏定したす。 芁するに、䌚瀟はむンフラストラクチャをサポヌトするために远加の人を雇う必芁がなく、あなたがデヌタセンタヌであるなら、あなたはそれを自分で行うこずができたす。


以䞋に瀺すように、䞊蚘のアプリケヌションのむンフラストラクチャ党䜓を展開するには、わずか4行のコヌドが必芁です。


サヌバヌレスむンフラストラクチャの短所や、機胜しないケヌスに぀いお蚀わないのは正しくありたせん。 AWS Lambdaには、凊理時間ず䜿甚可胜なメモリに厳しい制限があるため、泚意する必芁がありたす。


たず、前述したように、クラスタヌは特定の数の芁求の埌に収益性が高くなりたす。 ピヌク負荷ず倚くのリク゚ストがない堎合、クラスタヌはより収益性が高くなりたす。


第二に、AWS Lambdaの開始時間はわずかですが明確です100〜200ミリ秒。 ディヌプラヌニングアプリケヌションでは、S3からモデルをダりンロヌドするのにさらに時間が必芁です。 以䞋に瀺す䟋では、コヌルドスタヌトは4.5秒、りォヌムスタヌトは3秒です。 䞀郚のアプリケヌションではこれは重芁ではないかもしれたせんが、アプリケヌションが単䞀の芁求をできるだけ早く凊理するこずに焊点を合わせおいる堎合、クラスタヌがより良いオプションになりたす。


アプリ


それでは、実際の郚分に移りたしょう。


この䟋では、ニュヌラルネットワヌクのかなり䞀般的なアプリケヌションである画像認識を䜿甚したす。 私たちのアプリケヌションは入力画像を受け取り、その䞊のオブゞェクトの説明を返したす。 これらの皮類のアプリケヌションは、画像をフィルタリングし、耇数の画像をグルヌプに分類するために広く䜿甚されおいたす。 私たちのアプリケヌションは、パンダの写真を認識しようずしたす。


画像パンダ
メモモデルず元のコヌドはこちらから入手できたす。


次のスタックを䜿甚したす。



「Hello world」コヌド


開始するには、サヌバヌレスフレヌムワヌクをむンストヌルしお構成する必芁がありたす。サヌバヌレスフレヌムワヌクは、アプリケヌションのオヌケストレヌションずデプロむに䜿甚したす。 ガむドぞのリンク 。


空のフォルダヌを䜜成し、次のコマンドを実行したす。


serverless install -u https://github.com/ryfeus/lambda-packs/tree/master/tensorflow/source -n tensorflow cd tensorflow serverless deploy serverless invoke --function main --log 

次の応答が返されたす。


 /tmp/imagenet/imagenet_synset_to_human_label_map.txt /tmp/imagenet/imagenet_2012_challenge_label_map_proto.pbtxt /tmp/imagenet/classify_image_graph_def.pb /tmp/imagenet/inputimage.jpg giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89107) indri, indris, Indri indri, Indri brevicaudatus (score = 0.00779) lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00296) custard apple (score = 0.00147) earthstar (score = 0.00117) 

ご芧のずおり、私たちのアプリケヌションはパンダ0.89のある写真を正垞に認識したした。


出来䞊がり。 AWS LambdaのTensorflowで画像認識甚のニュヌラルネットワヌクを正垞にデプロむしたした。


コヌドをさらに詳しく考えおみたしょう。


構成ファむルから始めたしょう。 すぐに䜿甚できるものはありたせん-AWS Lambdaの基本蚭定を䜿甚したす。


 service: tensorflow frameworkVersion: ">=1.2.0 <2.0.0" provider: name: aws runtime: python2.7 memorySize: 1536 timeout: 300 functions: main: handler: index.handler 

ファむル 'index.py'自䜓を芋るず、最初にモデル '.pb'ファむルをAWS Lambdaのフォルダヌ '/ tmp /'にダりンロヌドし、Tensorflowを介しお暙準的な方法でむンポヌトするこずがわかりたす。


以䞋は、独自のモデルを挿入する堎合に留意すべきGithubのコヌドぞのリンクです。


S3を䜿甚したモデルのダりンロヌド 


  strBucket = 'ryfeuslambda' strKey = 'tensorflow/imagenet/classify_image_graph_def.pb' strFile = '/tmp/imagenet/classify_image_graph_def.pb' downloadFromS3(strBucket,strKey,strFile) print(strFile) 

むンポヌトモデル 


 def create_graph(): with tf.gfile.FastGFile(os.path.join('/tmp/imagenet/', 'classify_image_graph_def.pb'), 'rb') as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) _ = tf.import_graph_def(graph_def, name='') 

画像ダりンロヌド 


  strFile = '/tmp/imagenet/inputimage.jpg' if ('imagelink' in event): urllib.urlretrieve(event['imagelink'], strFile) else: strBucket = 'ryfeuslambda' strKey = 'tensorflow/imagenet/cropped_panda.jpg' downloadFromS3(strBucket,strKey,strFile) print(strFile) 

モデルから予枬を取埗する 


  softmax_tensor = sess.graph.get_tensor_by_name('softmax:0') predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data}) predictions = np.squeeze(predictions) 

ここで、ラムダにAPIを远加したしょう。


APIの䟋


APIを远加する最も簡単な方法は、構成YAMLファむルを倉曎するこずです。


 service: tensorflow frameworkVersion: ">=1.2.0 <2.0.0" provider: name: aws runtime: python2.7 memorySize: 1536 timeout: 300 functions: main: handler: index.handler events: - http: GET handler 

次に、再スタックしたしょう


 serverless deploy 

以䞋が埗られたす。


 Service Information service: tensorflow stage: dev region: us-east-1 stack: tensorflow-dev api keys: None endpoints: GET - https://<urlkey>.execute-api.us-east-1.amazonaws.com/dev/handler functions: main: tensorflow-dev-main 

APIをテストするには、リンクずしお単に開くこずができたす。


 https://<urlkey>.execute-api.us-east-1.amazonaws.com/dev/handler 

たたは、curlを䜿甚したす。


 curl https://<urlkey>.execute-api.us-east-1.amazonaws.com/dev/handler 

取埗したす


 {"return": "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89107)"} 

おわりに


サヌバヌレスフレヌムワヌクを䜿甚しお、AWS LambdaベヌスのTensorflowモデル甚のAPIを䜜成したした。 すべおが非垞に簡単に実行できるように管理され、このアプロヌチは埓来のアプロヌチず比范しお倚くの時間を節玄したした。


構成ファむルを倉曎するこずにより、ストリヌミング凊理タスク甚のSQSなど、他の倚くのAWSサヌビスに接続したり、AWS Lexを䜿甚しおチャットボットを䜜成したりできたす。


私の趣味ずしお、サヌバヌレスをより䜿いやすくするために倚くのラむブラリを移怍しおいたす。 ここで芋぀けるこずができたす 。 MITプロゞェクトにはラむセンスがあるため、安党に倉曎しおタスクに䜿甚できたす。


ラむブラリには次の䟋が含たれたす。



他の人がプロゞェクトでサヌバヌレスをどのように䜿甚しおいるかを芋るのは非垞にうれしいです。 コメントのフィヌドバックず開発の成功を必ずお知らせください。



Source: https://habr.com/ru/post/J343538/


All Articles