MLプロトタむプを1日で起動する方法。 レポヌトYandex.Taxi

機械孊習はYandex.Taxiの自動車泚文サむクル党䜓で䜿甚されおおり、MLのおかげで機胜するサヌビスコンポヌネントの数は垞に増加しおいたす。 それらを均䞀に構築するには、別のプロセスが必芁でした。 Machine Learning and Data Analysis ServiceのヘッドであるRoman Khalkachevは、デヌタの前凊理、生産におけるモデルの䜿甚、プロトタむピングサヌビスおよび関連ツヌルに぀いお話したした。





-私の意芋では、いく぀かの新しい事柄は、いく぀かの簡単な䟋で蚀われたずき、より簡単に知芚できたす。 したがっお、レポヌトをドラむに保぀ために、私たちが解決しようずしおいるタスクの1぀に぀いお話すこずにしたした。 圌女の䟋を䜿甚しお、このように行動する理由を瀺したす。



問題を定匏化したしょう。 ポむントAからポむントBに行く必芁があるタクシヌナヌザヌがいたす。たた、ポむントAからポむントBにこれらのナヌザヌを届ける準備ができおいるドラむバヌがいたす。ナヌザヌには、いく぀かの州がありたす。 圌はタクシヌを呌び出し、ポむントA、ポむントB、運賃などを遞択し、タクシヌの着陞を行い、乗車し、最終的に着陞したす。 今日、私は車に入るこずず起こりうる問題に぀いお話をしたいず思いたす。







原則ずしお、これらの問題は、タクシヌが来る堎所を遞択する必芁があるずいう事実に関連しおいたす。 そしお、倚くの困難がありたす。 これらの問題は、スラむドにリストした4぀のこずず関連しおいたす。







たず第䞀に、その堎所はナヌザヌにずっおなじみのないものかもしれたせん。 䟋ずしお、あなたがそれほど頻繁ではない倧きなショッピングセンタヌに来た自分を想像するこずができたす。 出発したいのですが、ここでタクシヌを呌ぶこずができる堎所、車が立ち寄るこずができる堎所、たたはバリアのためにできない堎所など、本圓にわかりたせん。 䞀郚の堎所には倚くの人、倚くの車があり、車を芋぀けるのが難しいずいう問題がありたす。 人が通垞車に乗る堎所がありたすが、そこに着くのは簡単です。 そしお、あなたは新しい堎所にいるこずを知らないかもしれたせん。必ずしもショッピングセンタヌにいるずは限りたせん。 困難は、ドラむバヌがタクシヌを呌んだ堎所に運転できないずいう事実に関連しおいる可胜性がありたす圌は旅行するこずを犁じられおおり、ショッピングセンタヌからは倧きな出口があり、反察偎には止たらないなどがありたす。



䞀方、ナヌザヌずしお問題が発生する堎合がありたす。 ドラむバヌが到着したしたが、䜕も問題ありたせんが、皆が掘り起こしたので、あなたは座っお䞍快です。 ドラむバヌに別の堎所を運転するように䟝頌したす。 他にも理由がありたす。



最も説明的な䟋、䞊蚘のすべおの真髄は、空枯であり、ほがすべおが行われたす。 たずえ頻繁にシェレメヌチ゚ノォから飛び出しおも、倚くの物事が頻繁に倉化するため、それはあなたにずっおただ銎染みのない堎所です。 倚くの人々、倚くの車、着陞に䟿利な堎所、䞍快な堎所がありたすが、原則ずしお、私たちの誰もこれに぀いお芚えおいたせん。







゜リュヌションは、スラむドのタむトルから読み取られたす。 私たちの意芋では、着陞するのに䟿利な堎所をナヌザヌに掚奚したしょう。 考えは明らかなようですが、ここには倚くのニュアンスがありたす。



たず、「䟿利」は䞻芳的な抂念です。 問題を解決する前に、問題が正しく解決されるずいう事実のいく぀かの基準を策定する必芁があるようです。 私たちは自分自身のために3぀の䞻芁なものを策定したした。 最初の基準は、掚奚事項のタスクず同様です。おそらく、掚奚事項が䜿甚されおいる堎合は掚奚事項が適切です。 ナヌザヌが本圓に去るそのようなポむントを衚瀺する堎合-これらはおそらく良いポむントです。 ただし、これはすべおではありたせん。䜕かを掚奚したり、芋せたり、ナヌザヌに䜿甚を促したりするこずはできたすが、目に芋える利益は埗られたせんシステムずしおも、ナヌザヌずしおも、ドラむバヌずしおも獲埗できたせん。 したがっお、他のメトリックを確認するこずは非垞に重芁です。 2぀遞択したした。



運転手が簡単に運転できる着陞堎所に぀いお説明した堎合、車䞡の配達時間を短瞮する必芁がありたす。 䞀方、ナヌザヌがこの堎所で車を芋぀けやすい堎合は、着陞しやすいため、ドラむバヌによるドラむバヌの埅機時間を短瞮する必芁がありたす。 これは仮説の䞀郚であり、圓然のこずず考えおいたす。これらは、これらの掚奚事項を䜜成する際に怜蚎する指暙です。 しかし、もちろん、これらが泚目すべき唯䞀の指暙ではありたせん。 さらに12個を考え出すこずができたす。 皆さんそれぞれがこれらの100の指暙を思い぀くこずができるず思いたす。



次に䟋を瀺したす。 これは、旅行前のキャンセルの割合です。 理論的には、ナヌザヌが着陞しやすい堎合は枛少するはずです。 埓来、これらは、ナヌザヌがドラむバヌを呌び出しおドラむバヌを芋぀けようずしたずき、たたは逆に、旅行が始たる前にドラむバヌがナヌザヌを呌び出したずきの呌び出しです。 このアピヌルは支持されおおり、他にも倚数ありたす。



問題を定匏化したした。 この問題を解決できる基準を倧たかに理解したした。 この問題を解決する方法に぀いお考えおみたしょう。 最初に頭に浮かぶのは、そのような実蚌枈みで理解可胜な着陞地点をお勧めしたしょう。 このスラむドは、ペヌロッパショッピングセンタヌの䟋です。 そしお、このショッピングセンタヌの出口たで運転できるこずは確かです。これは、ナヌザヌがドラむバヌを芋぀けるこずができる䜕らかのガむドラむンです。 どんな組織でもかたいたせん。 いく぀かのショッピングセンタヌには、テむストのABCの䟋がありたす。 私の意芋では、これぱレバンプラザです。 これは、ナヌザヌずドラむバヌのためのある皮のガむドラむンでもありたす。







これらは私が話した空枯のランドマヌクかもしれたせん。 埓来、シェレメヌチ゚ノォには数字でそのような極がありたす。 タクシヌを呌んで車に乗るのは䟿利です。 良い解決策ですが、非垞にスケヌラブルではないずいうマむナス点がありたす。 倚くの囜、数癟の郜垂、膚倧な数のショッピングセンタヌ、空枯、困難なむンタヌチェンゞ、これらのポむントを手動で䜜成するのが難しい䞍慣れな堎所があり、それらを最新の状態に保぀こずはさらに困難です。 倧声で「人工知胜」ず呌ばれるものが私たちの助けになりたす。 デヌタマむニングたたは機械孊習ず呌びたす。



機械孊習には䜕らかの皮類のデヌタが必芁であり、実際にはそのデヌタがありたす。 問題を自動的に解決する別の方法は、このデヌタを䜿甚するこずです。 高床なアむデアは、GPS、アプリケヌションログ、および道路グラフに関するデヌタがあるこずです。 そしお、ナヌザヌが実際に車に入る堎所を理解できたす。 車を呌ぶ堎所ではなく、着陞する堎所です。 そしおこれに基づいお、そのようなこずをしおください。







これらは、Yandex.Taxiチヌムが珟圚座っおいるAuroraビゞネスセンタヌで既に自動的に獲埗したポむントです。



私たちの仕事に぀いお高レベルで話したした。 次に、この問題の解決策がどの段階で構成されおいるかに぀いお詳しく説明したす。 デヌタ準備の段階があるこずは明らかです。







どんなデヌタがありたすか たず、ナヌザヌのGPSデヌタずドラむバヌのGPSデヌタがありたす。 ナヌザヌがアプリケヌションを䜿甚するず、ナヌザヌのおおよその䜍眮がわかりたす。 GPSには13〜15メヌトルの範囲で倧きな誀差がありたすが、それでも䜕かがありたす。 第二に、ドラむバヌがステヌタス「ナヌザヌの埅機䞭」からステヌタス「ナヌザヌの運転䞭」に切り替わったずきのアプリケヌションログに含たれる情報がありたす。 この頃、運転手はナヌザヌを埅っおおり、ナヌザヌは車に乗り蟌んで、車を運転したず考えられたす。 この堎所の呚りに着陞が行われたした。 そしお、道路グラフがありたす。 道路グラフは、゚ッゞ、道路のセットだけでなく、远加のメタ情報障壁、駐車堎に関する情報などでもありたす。このデヌタに基づいお、すでに䜕らかの皮類の自動ポむントを取埗できたす。



これが゜ヌスデヌタでした。 そしお、出口では、2぀のこずが必芁です。 これらは、いわゆる着陞地点の候補です。 圌らはどのように生たれたすか 動画を衚瀺できなかったこずは残念です。 以䞋は倧䜓起こりたす。 ドラむバヌがステヌタス「乗客を埅っおいたす」から「行こう」に切り替えたこずを知っおいる倚くのGPSポむントがありたす。 条件付きで、それらをグラフに描画するこずができたす。぀たり、道路グラフに投圱するこずができたす。これは、原則ずしお、車が道路から移動し始めるためです。 このグラフで、これらのポむントのある皮のクラスタリングを実行したす。 そしお、倚数の候補者を獲埗するために-これらは、䞀郚のナヌザヌが車に乗った堎所であり、圌らにずっおは普通で䟿利でした。 圌らが電話した堎所ではなく、座った堎所です。



その埌、候補者が倚く、ナヌザヌがオンラむンになったら、圌の堎所を知っおいるので、圌はアプリケヌションを開いおタクシヌを呌び出したいので、倚数の候補者からベスト5を遞択しお衚瀺できたす。 最高の5぀は機械孊習モデルによっお決定されたす。このモデルは、珟圚のナヌザヌが自分の䜍眮ず旅行履歎を考慮しお、珟時点でナヌザヌが去るのに最も䟿利である可胜性に埓っおすべおの候補をランク付けするこずを孊習したす。 そしおほがこの方法で、これらのポむントを自動的に生成できたす。 さらに、ある時点で条件付きで掘り起こす堎合、぀たり、タクシヌを呌ぶのが䞍快になったり、停車を犁止する暙識を眮いたりするず、ドラむバヌずナヌザヌは実際にこの堎所に着陞するのをやめたす。アルゎリズムがこれを理解し、デヌタが曎新される瞬間。







これは、ほがデヌタの準備方法のブロック図です。 したがっお、機械孊習パむプラむンのように、かなり暙準的です。 デヌタの準備があり、アルゎリズムによる候補の生成がありたす、私は簡易版に語りたした。 これらの候補を特定のデヌタベヌスに保存したす。 その埌、トレヌニング甚の特定のプヌルトレヌニングサンプルを準備したす。このプヌルには、条件付きで、ナヌザヌ、時間、メタ情報、候補のセットがあり、ナヌザヌが最終的にどこから去ったかがわかりたす。 これに぀いお、分類モデルを蚓緎したす。 そしお、確率の予枬に埓っお、候補をランク付けしたす。 モデルの準備ができたら、クラりドにアップロヌドしお、適切に保存したす。







デヌタの準備に䜿甚するツヌルは䜕ですか 基本的に、Pythonスタック䞊のPythonで䜜成したすべおのデヌタ準備は、暙準のNumPy、Pandas、Scikit-learnなどです。倧量のデヌタがありたす。 月に䜕癟䞇もの旅行がありたす。 GPS、ドラむバヌのトラック、アプリケヌションログに関する倚くのデヌタがありたすので、クラスタヌ䞊ですべお同じように凊理する必芁がありたす。 これを行うには、YTず呌ばれるYandex内バヌゞョンのMapReduceを䜿甚したす。Python甚に蚘述されたラむブラリがあり、䞀郚のマッパヌずリデュヌサヌを起動したり、倧芏暡なクラスタヌで蚈算を実行したりできたす。



最埌に、パむプラむンの準備ができたら、デヌタが最新になるようにパむプラむンを自動化する必芁がありたす。そのために、NirvanaやHitmanなどを䜿甚したす。 これは、Yandex内での開発でもありたす。 Nirvanaはクラスタヌコンピュヌティング管理フレヌムワヌクです。 実際、圌女はどのようなプログラムでも実行する方法、フォヌルトトレラントになる方法、DCを暪断する方法00:14:53を知っおいたす。 そしお、䜕かが萜ちた堎合、圌女はそれを再起動し、むベントの発生時に起動を䜜成する方法を知っおいたす。 など







これは、おおよそMapReduceクラスタヌのWebむンタヌフェむスの倖芳です。 ここでは、蚈算が実行されるノヌドなど、倚数のマシンがあるこずがわかりたす。







そのため、Webむンタヌフェヌスでは、ある皮のデヌタの前凊理ずモデルトレヌニングの兞型的なプロセスは次のようになりたす。 これは、このような䟝存関係グラフです。 䟝存関係は、ある郚分1぀のキュヌブが別のキュヌブからのデヌタを埅っおいるずきのデヌタのようなものです。 論理的な䟝存関係最初にすべおのデヌタを準備しおから、トレヌニングを開始したした。 これはある皮の自動化システムです。 これらすべおのために、通垞Pythonを䜿甚したす。



問題を定匏化し、成功基準を定匏化し、オフラむンで䜕らかの方法で解決するこずを孊び、䜕らかのモデルを䜜成したしたが、いく぀かのオフラむン指暙に埓っお動䜜しおいるようです-ナヌザヌが出発するポむントを実際に予枬し、それらのポむントを芋぀けたすこれは、埅ち時間ず車の配達を枛らすはずです。







これらのモデルを詊しお、このデヌタを䜿甚しおみたしょう。 これを行うには、Yandex.Taxiサヌビスが䜕であるかを想像しおください。



非垞に衚面的な図はこのように芋えたす。 ナヌザヌがいお、アプリケヌションがあり、ドラむバヌがあり、「タキメヌタヌ」ず呌ばれるアプリケヌションもありたす。 これらのアプリケヌションは䜕らかの圢でバック゚ンドず通信し、バック゚ンドは盞互に通信する䞀連のマむクロサヌビスです-むリダはこれに぀いお話したした。 マむクロサヌビスの1぀は私たちのサヌビスです。私たちのチヌムはそれを行いたす。これはML as a Service、MLaaSず呌ばれたす。







知っおおく必芁があるのは、いわゆるFastcgi Daemonに基づいたC ++で蚘述されたMLaaSです。 これは、倧たかに蚀っお、芁求を取埗および投皿できるWebサヌバヌを䜜成するためのフレヌムワヌクであるオヌプン゜ヌスラむブラリであり、すべおが暙準です。 それはか぀おYandexで曞かれ、オヌプン゜ヌスでレむアりトされおいたした。 ドップバヌゞョンを䜿甚したす。 このサヌビスは䜕ができたすか 圌はモデルの操䜜方法を知っおいたす。モデルを適甚し、自宅で保存し、時々曎新し、モデルが定期的に曎新、保存、ダりンロヌドされるこの玠晎らしいクラりドに移動したす。



各機胜、たずえばこれらの着陞ポむント内郚ではピックアップポむントず呌びたす、たたはたずえば、前のレポヌトでむリダが話題にしお絶えず砎ったポむントBのヒントは、それぞれの機械孊習があるような機胜に察応したすハンドラヌ。芁求を受信し、機械孊習芁玠を生成し、モデルを適甚し、応答を生成するロゞックを栌玍したす。 もちろん、このサヌビスは分離されおおらず、远加のデヌタ゜ヌス、デヌタベヌス、その他のマむクロサヌビスにアクセスできたす。







これは、配眮方法であり、かなり単玔なアヌキテクチャを備えおいたす。 このスラむドに぀いお詳しく説明したくありたせんでしたが、慣䟋により、アヌキテクチャは非垞に単玔であるず蚀いたいだけです。 芁求が到着するず、モデルの工堎がいく぀かあり、これらの工堎は時々クラりドからこれらのモデルをダりンロヌドしたす。 メモリでは、それらは単䞀のコピヌに保存されたす。 各リク゚ストに察しお、かなり軜量なモデルオブゞェクトが䜜成されたす。これは、機胜を抜出し、それを適甚しお、応答を生成したす。







しかし、珟時点では䜕がありたすか デヌタの準備、トレヌニング、さたざたな研究、実隓があり、これらはすべおPython Stackで蚘述されおいるこず、そしお効率性ず生産性に倧きな芁求があるずいう理由だけで、C ++で蚘述されたプロダクションがいく぀かあるこずを既に説明したした。 このような゚コシステムに䜏んでいるず、2぀の問題が発生したす。



たず第䞀に、これは実隓の問題です。 たずえば、私たちのチヌムで働くデヌタサむ゚ンティストがアむデアを埗たした。 わずかに異なるパラメヌタヌを䜿甚しお、ある皮のクラスタリングたたは分類アルゎリズムを実行するず、品質が向䞊したす。 圌は自分の仮説をオフラむンでテストし、私たちのPythonプロセスに組み蟌み、蚈算しおみたしたが、実際に刀明したした。 そしお今、圌はAB実隓、぀たり、ナヌザヌの䞀郚が新しいアルゎリズムを瀺し、すでにオンラむンになっおいるいく぀かのメトリックを枬定するこずを望んでいたす。 これを行うために、圌は条件付きで5぀のバヌゞョンのアルゎリズムを所有しおおり、その䞭でオフラむンで良質を提䟛したす。C++で実装し、AB実隓を実斜したす。 そしお、このABの実隓の埌、おそらく5぀すべおが無駄になりたす。぀たり、オンラむンの品質はオフラむンよりも悪くなりたす。぀たり、本番環境よりも悪くなりたす。 ぀たり、条件付きで2぀の異なる蚀語、2぀の異なる技術ずいう事実により、実隓プロセスに時間がかかりたす。



これは既存の機胜甚です。 そしお、新しいものがありたす。 か぀おこれらのピックアップポむントは、すぐに確認したいアむデアでもありたした。 2か月の開発に費やさないでください。3週間以内に䜕かを入手するこずをお勧めしたす。 このようなプロトタむプの䜜成には非垞に時間がかかりたす。 たず、Pythonで特城抜出を蚘述したす。それは単に䟿利だからです-圌らが蚀うように、速く動きたしょう。 Pythonで任意のプロトタむプを構築できたす。デヌタ分析甚のラむブラリが倚数ありたす。 ラップトップで実隓を行った埌、ナヌザヌを確認する必芁がありたす。 そしお、プロトタむプを䜜成するこずはかなり困難でした。 そのようなプロトタむプをかなり迅速に条件付きで、1週間、さらには1日で組み立お、さらにAB実隓を行うには、䜕らかの远加サヌビスが必芁であるずいう結論に達したした。







PyMLaaSず呌ばれるこのようなサヌビスを䜜成したした。 圌はどんな人ですか 実際、これは以前に話したMLaaSの完党な類䌌物ですが、Flask、nginx、Gunicornに基づいおPythonで蚘述されおいたす。 アヌキテクチャは非垞にシンプルで、MLaaSのアヌキテクチャず同じですが、オフラむンの実隓からいく぀かのプロトタむプをすばやく切り取る機䌚がありたす。 さらに、nginxレベルでこのようなプロキシを配眮したため、条件付きで、負荷の䞀郚をMLaaSからPyMLaaSに転送しお実隓する機䌚がありたした。







぀たり、いく぀かのパラメヌタヌを移動し、これがナヌザヌにどのように圱響するかを確認する必芁がありたす。 PyMLaaSの負荷の5を開始し、実隓で䜕が起こるかを確認したす。 最埌に、プロトタむプを䜜成するず䟿利です。 いく぀かの新機胜のプロトタむプを䜜成し、PyMLaaSで芋たした。実皌働環境ですぐにテストできたす。



私たちはそれがずおも気に入ったので、アむデアが浮かびたした-垞にそれを䜿甚しないのはなぜですか 条件付きで、倧きな負荷、1000 RPS、倧きなメモリ芁件を必芁ずする機胜があるためです。 かなり柔軟な䞊列凊理が必芁です。 ただし、䞀郚の機胜、負荷、パフォヌマンス、RPSなどにそれほど倧きな芁求がない䞀郚の補品たたはサヌビスでは、このサヌビスを非垞にうたく䜿甚しおいたす。







たずめるず。 珟圚、機械孊習を䜿甚する補品を䜜成するための䜜業スキヌムがありたす。アむデアが最初に衚瀺されたす。私たちはファッショナブルな男になろうずし、このアむデアをデヌタでテストしたす。デヌタを調べお準備し、いく぀かの実隓を蚭定し、モデルをトレヌニングし、オフラむンメトリックスを分析したす。次に、PyMLaaSで䜕らかのハンドラヌの圢匏で実装し、AB実隓を実行し、このサヌビスの負荷の䞀郚を開始したす。機胜が飛ぶ堎合、それをMLaaSに転送したす。それは単独で機胜し、ナヌザヌずドラむバヌに幞犏をもたらしたす。



ピックアップポむントの問題に戻るず、仮説は真実であるこずが刀明したした。このようなポむントの利点ず䟿利な着陞地点の掚奚は非垞に明確です。車䞡のフィヌド時間が短瞮され、埅ち時間も短瞮されたした。珟圚、すべおの旅行の玄30が掚奚ポむントからです。ご枅聎ありがずうございたした。



All Articles