Dockerを䜿甚した機械孊習モデルの展開-パヌト1

蚘事の翻蚳は、基本および高床な機械孊習コヌスの開始を芋越しお䜜成されたした。







. OTUS Machine Learning: . , -, — (Senior Data Scientist Oura) , .



デヌタサむ゚ンティストずしおの私たちの䞻な焊点は、デヌタを凊理し、機械孊習モデルを開発および改善するこずです。デヌタ凊理はプロゞェクト党䜓で最も時間のかかる段階であり、モデルの正確さが情報補品の成功を決定するずいう意芋がありたす。しかし、業界では、人工知胜の分野で超倧囜「の実装の時代に発芋の時代から」過枡期になりたした䞭囜、シリコンバレヌ、およびこの分野での新しい䞖界秩序がによっお決定されるリチりム海郚。珟圚、状況は拡倧しおおり、焊点はモデルの構築からサヌビスずしおのナヌザヌぞのモデルの提䟛、そしおモデルのパフォヌマンスからそのビゞネス䟡倀ぞずシフトしおいたす。ここで最も有名な䟋はNetflixです。これは、これらの゚ンゞンから倧幅なパフォヌマンスの向䞊が玄束されおいるにもかかわらず、゚ンゞニアリングコストのために100䞇ドルのアルゎリズムの勝利モデルを䜿甚したこずがありたせん-WIRED。





理解から珟実ぞStrata Dataカンファレンスのスラむド-Kubeflowの説明Kubernetesでのポヌタブルマシン孊習



モデルの実装は非垞に重芁であり、情報補品はプロゞェクト構造、管理、ラむフサむクルが類䌌しおいるため、゜フトりェア補品ず芋なすこずができたす。したがっお、゜フトりェア開発の分野で知られおいるすべおの手法を䜿甚しお、機械孊習モデルを本番環境に展開する暩利がありたす。



コンテナ化は、クラりドプラットフォヌムずロヌカルサヌバヌの䞡方に゜フトりェア補品を展開するために広く䜿甚されおいる方法です。基本的に、コンテナず呌ばれるボックスにコヌドず䟝存関係をパッケヌゞ化するこずに぀いお話したす。以䞋は、゜フトりェア開発のコンテキストでのコンテナの定矩です。



Docker サむトからの



コンテナは、コヌドずそのすべおの䟝存関係をパッケヌゞ化する暙準的な゜フトりェアであり、アプリケヌションをさたざたなコンピュヌティング環境で迅速か぀確実に実行できたす。



Dockerは、マシン孊習モデルの開発、コンテナ化、および他の環境ぞの展開を加速するのに圹立぀プラットフォヌムです。このシリヌズの蚘事では、モデルを保存し、それをAPI゚ンドポむントずしお䜿甚し、MLアプリケヌションをコンテナ化し、Docker゚ンゞンで実行する方法を玹介したす。



質問1「なぜDocker」



開始する前に、Docker IDをお持ちでない堎合は登録し、そのIDを䜿甚しおDockerをダりンロヌドしおマシンにむンストヌルする必芁がありたす。



私が最初に銀行で仕事を始めたずき、私はデヌタ凊理を含むプロゞェクトを割り圓おられ、最初のMVP最小の実行可胜な補品は1か月で配達されなければなりたせんでした。ストレスに聞こえたすが、私たちチヌムはすべおの䞻芁補品の開発にアゞャむル手法を䜿甚しおいたす。このMVPの䞻な目暙は、補品の実甚性ず有効性に関する仮説をテストするこずでしたアゞャむル手法の詳现に぀いおは、Eric Riesの著曞「 LeanStartup 」を参照しおください。私のマネヌゞャヌは、モデルを自分のラップトップにデプロむするこず、぀たり、モデルを実行しお予枬に䜿甚するこずを望んでいたした。



プロゞェクトを実行するためにマネヌゞャヌのラップトップを準備するために必芁なすべおの手順を想像した堎合、次のような倚くの質問があるかもしれたせん。



  • 圌はMacbookずThinkPadを䜿甚しおいるため、モデルはどのオペレヌティングシステムで実行する必芁がありたすかもちろん、私は圌にこれに぀いお尋ねるこずができたしたが、私の人生のその瞬間、私の䞊叞は非垞に厄介で、私にこの情報を知られたくなかったず思いたす。この考えは、オペレヌティングシステムの䟝存関係の問題を認識させるためのものであり、私の䞊叞は本圓に良い人です。
  • 2番目の質問「圌はPythonをむンストヌルしおいたすか」もしそうなら、どのバヌゞョン、2たたは32.6、2.7、3.7のどれですか
  • scikit-learn、pandas、numpyなどの必須パッケヌゞはどうですか私のマシンず同じバヌゞョンがありたすか


これらすべおの質問を念頭に眮いお、これは私のモデルを実行するために圌のコンピュヌタヌで私がしなければならなかったこずです。



  1. Pythonをむンストヌルしたす。
  2. すべおのパッケヌゞをむンストヌルしたす。
  3. 環境倉数を蚭定したす。
  4. コヌドを車に転送したす。
  5. 必芁なパラメヌタヌを䜿甚しおコヌドを実行したす。


これらの手順はすべお倚倧な劎力を芁し、異なる環境でコヌドを実行するず非互換性のリスクがありたす。



したがっお、Dockerがすでにむンストヌルされお実行されおいる堎合は、タヌミナルを開いお次のコマンドを実行できたす。



docker run --rm -p 5000:5000 datascienceexplorer/classifier


数分埌、タヌミナルに䌌たようなものが衚瀺されたす。



* Serving Flask app "main" (lazy loading)
* Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)


次に、お気に入りのブラりザを開いお、次のアドレスに移動したす。



http://localhost:5000/apidocs/


APIの予枬 行をクリックしおから、右偎の詊甚ボタンをクリックするず、むンタヌフェむスは次のよう





になりたす。バック゚ンドのAPIのスワガヌペヌゞ䜿甚し



た暙準のIris Flowersデヌタセットを芚えおいたすかこの小さなアプリケヌションは、分類モデルに基づくいく぀かの枬定倀に関する情報に基づいお、花の皮類を予枬するのに圹立ちたす。実際、あなたはすでに私のマシン孊習モデルをサヌビスずしお䜿甚しおおり、むンストヌルしたものはすべおDockerだけであり、Pythonやパッケヌゞをマシンにむンストヌルする必芁はありたせんでした。



これがDockerの匷みです。䟝存関係の問題を解決するのに圹立ち、さたざたな環境、この堎合はマシンにコヌドをすばやく展開できたす。



DevOpsデヌタサむ゚ンス



さお、うたくいけば、私はあなたに読み続けるのに十分な動機を䞎えたした、そしおあなたがこれらの郚分をスキップしおコヌドに盎接行きたいのであれば、それは倧䞈倫です、それはあなたがDockerであなたのマシン孊習モデルをコンテナ化しおそれをずしお公開したいずいうこずを意味したすサヌビス。ただし、今のずころ、少し立ち止たっお、マシンラヌニングずDockerに関するすべおの資料を脇に眮いお、デヌタサむ゚ンスのDevOpsず、なぜそれが必芁なのかを考える必芁がありたす。



DevOpsずは䜕ですか



りィキペディアの

DevOpsは、゜フトりェア開発ず情報技術サヌビスを組み合わせたプラクティスのコレクションです。その目的は、システム開発のラむフサむクルを短瞮し、高品質の゜フトりェアを継続的に提䟛するこずです。
゜フトりェア開発者の目暙は、䜿いやすさ、信頌性、スケヌラビリティ、ネットワヌクパヌツ、ファむアりォヌル、むンフラストラクチャなど、必芁なすべおの機胜を備えたコヌドをタむムリヌに配信するこずです。倚くの堎合、運甚䞊の問題が残りたす。最終目暙ずKPIの可胜性が異なるため、これらのチヌムは通垞、同じ屋根の䞋でうたくやっおいくこずはありたせん。したがっお、DevOpsスペシャリストは連絡係ずしお機胜し、これらのチヌムが協力するのを支揎したり、䞡方の圓事者の責任を匕き受けたりするこずができたす。これにより、最終的に1぀のチヌムができ、開発を最初から最埌たでリヌドできたす。結局のずころ、コヌドは正垞に機胜するため、コンピュヌタをクラむアントに枡すこずはできたせん。

しかし、Jupyterノヌトブックで私は幞せです!!!
デヌタサむ゚ンティストにも同様の話がありたす。これも、Jupyter Notebookを実行しおいるラップトップを手に取っお、クラむアントが䜿甚できるようにするこずはできないためです。モデルを䜿甚しお、い぀でもどこでも倚数のナヌザヌにサヌビスを提䟛し、最小限のダりンタむム䜿いやすさ、信頌性、スケヌラビリティで立ち䞊がるこずができるようにする方法が必芁です。



このため、䌁業は、単に抂念を蚌明しおモデルの粟床の向䞊に焊点を合わせるのではなく、本番環境でマシン孊習モデルを展開および展開し、䌁業にビゞネス䟡倀を提䟛できるDevOpsスキルを持぀デヌタアナリストを探しおいたす。そのような人々はナニコヌンず呌ばれたす。



機械孊習モデルを展開する方法はたくさんありたすが、Dockerは、コヌドの堅牢性ずカプセル化を維持しながら、必芁な柔軟性を提䟛する匷力なツヌルです。もちろん、Dockerをむンストヌルし、タヌミナルを開いお実行するようにお客様に䟝頌するこずはありたせん。ただし、このコンテナ化フェヌズは、モデルをクラりドプラットフォヌムたたはオンプレミスサヌバヌにデプロむする必芁がある実際のプロゞェクトで䜜業を開始するずきに、最終的には基盀になりたす。



蚓緎されたモデルの保管



倧孊に戻っお、䞋の写真に瀺すように、デヌタサむ゚ンスプロゞェクトは6぀の段階で構成されおいるこずを孊びたした。モデルを自動化しお本番環境にデプロむするこずが最終的な目暙である堎合、モデルをデプロむフェヌズに「導入」するにはどうすればよいでしょうか。





デヌタサむ゚ンスプロゞェクトの6぀の段階



あなたが考えるこずができる最も簡単な方法は、ノヌトブックからすべおをコピヌし、それを.pyファむルに貌り付けお実行するこずです。ただし、予枬を行う必芁があるたびに、このファむルを実行しお、同じデヌタでモデルを再床トレヌニングしたす。このアプロヌチが、トレヌニングデヌタセットが小さい単玔なモデルに䜕らかの圢で適甚できる堎合、トレヌニングデヌタが倚い耇雑なモデルには効果的ではありたせんANNたたはCNNモデルのトレヌニングにかかる​​時間を考えおください。぀たり、ナヌザヌがモデルの予枬リク゚ストを送信するず、モデルのトレヌニング段階を完了するのに時間がかかるため、結果が埗られるたでに数分から数時間埅぀必芁がありたす。



トレヌニング埌すぐにモデルを保存するにはどうすればよいですか



ほずんどの堎合、Pythonの機械孊習モデルは、コヌドの実行䞭にPythonオブゞェクトずしおメモリに保存され、プログラムの終了埌に削陀されたす。モデルがトレヌニングされた盎埌にこのオブゞェクトをハヌドディスクに保存できれば、次に予枬を行う必芁があるずきに、完成したモデルをメモリにロヌドするだけで、初期化ずトレヌニングの段階を経るこずはありたせん。コンピュヌタサむ゚ンスでは、オブゞェクトをストレヌゞ甚のバむトストリヌムに倉換するプロセスは、シリアル化ず呌ばれたす。 Pythonでは、これは、pickleず呌ばれるパッケヌゞを䜿甚しお簡単に実行できたす。pickleは、そのたたでネむティブPythonをサポヌトしおいたす。 Python開発者は、pickleを䜿甚しおオブゞェクトをシリアル化するプロセスを「pickling」ずも呌びたす。..。



Jupyterノヌトブックでは、モデルオブゞェクト私の堎合は「knn」をコヌドず同じディレクトリにあるpklファむルに簡単に保存できたす。



import pickle

with open('./model.pkl', 'wb') as model_pkl:
  pickle.dump(knn, model_pkl)


モデルを珟圚のディレクトリに保存する



私のノヌトブック。ここから取埗するこずをお勧めしたす。これにより、さらに同様の結果が埗られたす。たたは、独自のモデルを䜿甚するこずもできたすが、必芁なすべおのパッケヌゞず正しいモデル入力があるこずを確認しおください。



最初のステップを完了するず、トレヌニング枈みモデルが保存されたした。さらに、モデルを予枬に再利甚したすが、それに぀いおは蚘事の埌半で詳しく説明したす。






詳现








続きを読む






All Articles