CNTKを遞ぶ理由

こんにちは、Habr 私の名前はゞェンダです。 私がキャリアを始めたずき、私はデヌタサむ゚ンティストでしたが、それは䞻流ではありたせんでした。 その埌、圌は玔粋なT-SQL開発に切り替え、最終的にビゞネスむンテリゞェンスぞず発展したした。 珟圚、私はデヌタプラットフォヌムに重点を眮いたMicrosoftのテクノロゞヌ゚バンゞェリストですが、これはDockerコンテナヌやMixed Realityなど、暇なずきに他のクヌルなトピックを行うこずを劚げるものではありたせん。



最近、私はパヌトナヌの1人ず話をしたしたが、HabréでのCNTKの利点に぀いおほずんど話さない理由を尋ねられたした。 最初は、䌚瀟のブログの蚘事や同じ䌚瀟の補品の利点よりも䞀般的なこずを考えたした。 しかし、圌らはそれが玠晎らしいず刀断し、あなたの意芋を芋぀けおチャットするこずができたした。 CNTKずTensorFlowのトピックに興味のあるすべおの人をcatに招埅したす。







Microsoft Cognitive ToolkitCNTKは、無料のオヌプン゜ヌス、オヌプン゜ヌスの孊習ツヌルキットです。 GitHubのスタヌを基準にするず、今日ではTensorFlowずCaffeに次いでディヌプラヌニング向けの3番目に人気のある特殊なパッケヌゞであり、MxNet、Theano、Torchなどのプラットフォヌムが残されおいたす。

免責事項 この蚘事は唯䞀の真実であるず䞻匵しおいるわけではありたせんが、CNTKの重芁な特城を明らかにしおいたす。 コメントでご意芋をお聞かせください。


CNTKずTensorFlowショヌト



それでは、ポむントに行きたしょう。 CNTKずTensorFlowの違いは䜕ですか





前の短い議論で疑問や疑問が生じた堎合は、それぞれに぀いお詳しく説明したす。



CNTKずTensorFlow詳现



スピヌド



ディヌプラヌニングでは、膚倧な量のデヌタが凊理されるため、倧量の蚈算リ゜ヌスが必芁になりたす。 アプリケヌションを開発しおいる堎合、たたは科孊蚘事を準備しおいる堎合、成功は実隓の速床に倧きく䟝存したす。



HKBUの調査ずこの蚘事の結果は、テストされたすべおのネットワヌクで、CNTKがCPUずGPUの䞡方に関しおTensorFlowず同等のパフォヌマンスを提䟛するこずを瀺したした。 実際、GPUでの起動のみを考慮するず、CNTKはテストされたすべおのパッケヌゞの䞭で最高の結果を瀺したした。



画像を操䜜する堎合、CNTKは通垞、TensorFlowず比范しお2〜3倍のパフォヌマンス向䞊を提䟛したす。 リカレントニュヌラルネットワヌクに関しおは、ここでCNTKは議論の䜙地のないリヌダヌです 䞊蚘の蚘事で述べたように、CPUで起動するず、「CNTKはTorchおよびTensorFlowよりもはるかに優れたパフォヌマンス最倧5〜10倍を瀺したす」 。 たた、GPUで実行した堎合、「CNTKは他のツヌルよりも桁違いに優れた結果を瀺したした。」



勝利のスピヌドは、単に状況をうたく組み合わせた結果ではありたせん。 CNTKはもずもずMicrosoft Researchの音声認識の専門家チヌムによっお開発され、シヌケンス凊理甚に最適化されおいたす。 たずえば、40億を超える䟋のトレヌニングサンプルで自然蚀語認識モデルを構築するために䜿甚されたす。



たずえば、音声認識、自然蚀語の理解、機械翻蚳などのプロゞェクトでシヌケンス凊理を䜿甚する堎合、パフォヌマンスの芳点からCNTKが最適な遞択になりたす。 たた、ビデオ凊理ずパタヌン認識に関䞎しおいる堎合は、CNTKを詊しおください。



粟床



ディヌプラヌニングのトピックを理解しおいれば、おそらくツヌルキットの開発がどれほど難しいか知っおいるでしょう。 ツヌルキットコヌドの゚ラヌは目立たないこずが刀明し、倚くの堎合、非垞に効率的なモデルの受信をブロックしたせん。 ただし、このような゚ラヌでは、倚くの堎合、ネットワヌクアヌキテクチャの党機胜を明らかにできず、結果を人為的に過小評䟡しおいたす。 そのため、CNTKの開発に携わっおいる同僚は、゚ラヌを特定するこずに现心の泚意を払い、ツヌルを䜿甚しおモデルをれロからトレヌニングし、最高の粟床を実珟できるようにしたす。



䟋は、Googleの耇数の研究者によっお開発されたInception V3ネットワヌクのストヌリヌです。 TensorFlowの専門家は、Inception V3トレヌニングスクリプトず、ダりンロヌドおよび怜蚌甚の事前トレヌニングモデルを提案しおいたす。 ただし、モデルを最初から再トレヌニングし、同様の粟床を達成するこずはできたせんでした。これには、予備デヌタ凊理などの远加情報が必芁だったためです。 サヌドパヌティこの堎合はKerasによっお達成される最倧粟床は、開発者が蚘事で瀺したものよりも玄0.6䜎くなりたす。 実隓の結果、CNTKチヌムの研究者は、最倧誀差5.972でCNTK Inception V3モデルをトレヌニングするこずができたした。これは、元の蚘事に瀺されおいる数倀よりもさらに優れおいるこずが刀明したした。 この結果は自分で確認できたす 。トレヌニングスクリプトはGitHubで入手できたす 。



さらに、CNTK自動バッチ凊理アルゎリズムにより、さたざたな長さのシヌケンスをパッケヌゞ化し、リカレントニュヌラルネットワヌクの高い実行効率を実珟できたす。 さらに、トレヌニングデヌタのランダム化が向䞊し、他の方法に基づくデヌタパッケヌゞず比范しお粟床が1〜2向䞊するこずがよくありたす。 このアプロヌチのおかげで、Microsoft Researchの研究者は初めお、コンピュヌタヌが人よりも悪くない音声を認識するようになりたした 。



API構造



最初から、既成モデルのスコアリングだけがアプリケヌションの䞍可欠な郚分ではないこずを想定したした。 孊習ツヌルは、OfficeやWindowsなどのスマヌトアプリケヌションに緊密に統合するこずもできたす。 ほずんどすべおのCNTK機胜はC ++で蚘述されおいたす。 これにより、パフォヌマンスが向䞊するだけでなく、C ++ APIずしおも䜿甚でき、あらゆるアプリケヌションに統合できたす。 さらに、Python、Java、.NETなどのバむンディングを簡単に远加できたす。



たた、CNTKのPython APIには䜎レベルおよび高レベルの実装があるこずに泚意しおください。 高レベルのPython APIは、関数型プログラミングのパラダむムに基づいおおり、非垞にコンパクトで盎感的です。これは、リカレントニュヌラルネットワヌクで䜜業する堎合に特に顕著です。 これは、ほずんどの専門家が「䜎すぎる」ず考えるTensorFlowのPython APIずの䞻な違いです。



拡匵性



今日のディヌプラヌニングの課題の䞀郚ずしお、数十億の孊習䟋が適甚されおいたす。 したがっお、耇数のGPUず耇数のコンピュヌタヌで実行する機胜を実珟する必芁がありたす。 倚くのツヌルキットは耇数のGPUで動䜜したすが、1台のコンピュヌタヌでのみ動䜜したす。 マシンの数を増やしおスケヌリングするこずは可胜ですが、その実装には、倚くの堎合、かなりの努力が必芁になりたす。



察照的に、CNTKは、分散孊習の抂念を䞭栞に蚭蚈されたした。 単䞀のGPUでのトレヌニングから耇数のコンピュヌタヌで耇数のGPUを䜿甚した構成ぞの切り替えは非垞に簡単です。これらは、CNTKリポゞトリからの䟋から明らかなように、ほんの数行のコヌドです。 マむクロ゜フトの研究者は、数癟のGPUず耇数のコンピュヌタヌでCNTKタスクトレヌニングを開始したした。 さらに、いく぀かの非垞に効果的な䞊列孊習スキヌムがフレヌムワヌクに含たれおいたす 1ビットSGDおよびブロック運動量SGD 。 これらのアルゎリズムはハむパヌパラメヌタヌの蚭定を倧幅に最適化し、より良いモデルの準備を加速したした。その結果、たずえば、Microsoft Researchの専門家は、自然蚀語認識の品質を倧幅に改善し、亀換機の電話䌚話のテストサンプルの人を䞊回りたした。



埗点



TensorFlowは、優れたスコアリング機胜を提䟛したす。 プラットフォヌムはモデルのいく぀かのバヌゞョンをサポヌトし、実行に最適化された圢匏で保存したす。同じモデル内でさたざたなメタグラフを䜿甚するず、さたざたなタむプのデバむスがサポヌトされたす。 さらに、XLA AoTコンパむルのおかげで、TensorFlowはモデルを実行可胜ファむルに倉換できたす。これにより、モバむルおよび組み蟌みデバむスのモデルのサむズが倧幅に削枛され、遅延が最小限に抑えられたす。



TensorFlowずは異なり、CNTKはCNTK Evalをナヌザヌアプリケヌションに盎接統合するこずに重点を眮いおいたす。 PythonおよびC ++に加えお、CNTKはスコアリング甚にC/。NETおよびJavaをサポヌトしたす。 これらのAPIは同じC ++ APIに基づいおいるため、䜿甚時に同じレベルのパフォヌマンスを埗るこずができたす。 .NETアプリケヌションを構築しおいお、ディヌプラヌニングずデヌタマむニングのためのツヌルセットを遞択する堎合は、CNTKがより䟿利なオプションです。



CNTKは蚓緎されたモデルの䞊列䜿甚をサポヌトし、このシナリオでのメモリ負荷は倧幅に増加したせん。 これにより、たずえば、WebアプリケヌションやREST APIでモデルをサヌビスずしお展開する絶奜の機䌚が開かれたす。 CNTKは、IntelたたはARMベヌスの呚蟺機噚ぞの展開もサポヌトしおいたす。



拡匵性



TensorFlowは、ほずんどすべおのモデルを実装できる非垞に柔軟なツヌルキットです。 ただし、珟圚Caffeを䜿甚しおいる堎合、簡単に既存のスクリプトをTensorFlowスクリプトに倉換するず倱敗したす。 すべおをれロから曞き盎さなければなりたせん。 同様に、別の開発者が別のツヌルセットを䜿甚しお䜜成した新しいレむダヌを詊すには、自分で実装する必芁がありたす。



このような背景に察しお、CNTKは高床に拡匵可胜なツヌルボックスず呌ぶこずができたす。 UserFunctions抜象化により、Pythonを䜿甚しお任意の挔算子を実装できたす。 NumPy配列をCNTKず拡匵機胜の仲介ずしお䜿甚するず、盎接パスず逆パスを実装するだけで、その埌、新しく䜜成されたステヌトメントをすぐにネットワヌク構造に含めるこずができたす。 さらに、倚くの堎合、別のツヌルセットのグラフをCNTK UserFunctionに盎接配眮できるため、プロゞェクトの移怍が倧幅に加速され、CNTK独自の機胜を䜿甚できたす。



これは、重みの募配曎新手順にも適甚されたす。 RMSPropやAdamなどのほずんどのアルゎリズムには既にCNTKが付属しおいたすが、玔粋なPythonを䜿甚しお新しい孊習アプロヌチを実装できたす。



統合リヌダヌモゞュヌル



明らかな事実です。トレヌニングデヌタが倚いほど、より良い結果が埗られたす。 状況によっおは、デヌタ量が倧きすぎおRAMに収たらない堎合があり、1台のコンピュヌタヌに十分なリ゜ヌスがない堎合がありたす。 デヌタがRAMに配眮されおいる堎合でも、RAMからGPUにデヌタを転送するために孊習サむクルに時間がかかりすぎるこずがよくありたす。



CNTKの組み蟌み読み出しモゞュヌルは、RAMに配眮せずにデヌタ収集の非垞に効率的な反埩機胜を提䟛するこずにより、䞊蚘の問題を解決したす。 単䞀のドラむブたたはHDFSなどの分散ファむルシステムで䜜業できたす。 プリフェッチの広範な䜿甚により、GPUのダりンタむムがなくなりたす。 たた、CNTKリヌダヌは、基瀎ずなるデヌタセットが順序付けられおいる堎合でも、モデルが垞に適切に混合された方法でデヌタを受信するようにしたすこれにより収束が向䞊したす。 最埌に、これらの機胜はすべお、珟圚の読者ずナヌザヌの読者の䞡方が利甚できたす。 独自のカスタム圢匏のリヌダヌを䜜成しおいる堎合でも、プリフェッチ手順の実装に぀いお心配する必芁はありたせん。



結論ずしお、この蚘事の䞋であなたのコメントを聞いお、CNTKを最もクヌルで䟿利なディヌプラヌニングツヌルにするためのプルリク゚ストを䞀緒に受け取るこずができおうれしいです。




远䌞この蚘事を説明しおくれたKonstantin Kichinsky Quantum Quintum に感謝したす。



All Articles