sklearnのトレーニング速度が100倍以上向上、米「Fanli.com」がsk-distフレームワークをオープンソース化

sklearnのトレーニング速度が100倍以上向上、米「Fanli.com」がsk-distフレームワークをオープンソース化

この記事では、Ibotta (「Rebate Network」の米国版) の機械学習およびデータ サイエンス マネージャーである Evan Harris が、同社のオープン ソース プロジェクト sk-dist を紹介します。これは、scikit-learn メタ推定器を配布するための Spark 汎用フレームワークです。Spark と scikit-learn の要素を組み合わせ、sklearn トレーニングを 100 倍以上高速化できます。

Ibotta では、多くの機械学習モデルをトレーニングしています。これらのモデルは、当社の推奨システム、検索エンジン、価格最適化エンジン、データ品質などに役立ち、当社のモバイル アプリを操作する何百万ものユーザーに対する予測を行います。

多くのデータ処理に Spark を使用していますが、私たちが好む機械学習フレームワークは scikit-learn です。コンピューティングがますます手頃な価格になり、機械学習ソリューションの市場投入までの時間がますます重要になるにつれて、私たちはモデルトレーニングの加速に向けて一歩を踏み出しました。 1 つの解決策は、Spark と scikit-learn の要素を独自の融合ソリューションに組み合わせることです。

プロジェクトアドレス: https://github.com/Ibotta/sk-dist

sk-distとは何か

オープンソース プロジェクト sk-dist をリリースできることを嬉しく思います。このプロジェクトの目標は、scikit-learn メタ推定器を配布するための Spark 汎用フレームワークを提供することです。メタ推定器の応用には、決定木アンサンブル (ランダム フォレストと追加のランダム化ツリー)、ハイパーパラメータ調整 (グリッド検索とランダム検索)、およびマルチクラス手法 (1 対すべてと 1 対 1) が含まれます。

私たちの主な目標は、機械学習モデルの従来の分布選択のギャップを埋めることです。ニューラル ネットワークとディープラーニングの領域以外では、モデルをトレーニングするための計算時間のほとんどは、単一のデータセットで単一のモデルをトレーニングすることに費やされるのではなく、グリッド検索やアンサンブルなどのメタ推定器を使用して、データセットの複数の反復でモデルの複数の反復をトレーニングすることに費やされていることがわかります。

手書き数字データセットを例に挙げます。簡単に分類できるように手書きの数字の画像をエンコードしました。 1 台のマシンで 1 秒未満で 1797 件のレコードのデータセットに対してサポート ベクター マシンを迅速にトレーニングできます。ただし、ハイパーパラメータの調整には、トレーニング データのさまざまなサブセットに対する広範なトレーニングが必要です。

下の図に示すように、合計 1050 個のトレーニング項目を必要とするパラメーター グリッドを構築しました。 100 個を超えるコアを持つ Spark クラスターで sk-dist を使用すると、わずか 3.4 秒しかかかりません。このジョブの合計タスク時間は 7.2 分です。つまり、並列化を行わない単一のマシンではトレーニングにこれだけの時間がかかります。

  1. sklearnからtimeをインポートし、データセット、svmをインポートします
  2. skdist.distribute.search からDistGridSearchCVをインポートします
  3. from pyspark.sql import SparkSession # Sparkセッションをインスタンス化します
  4. スパーク = (
  5. スパークセッション
  6. 。ビルダー
  7. .getOrCreate()
  8. sc = spark.sparkContext
  9.  
  10. # 数字データセット
  11. 数字 = datasets.load_digits()
  12. X = 数字[ "データ" ]
  13. y = 数字[ "ターゲット" ]
  14.  
  15. # 分類器を作成する: サポートベクター分類器
  16. 分類子 = svm.SVC()
  17. パラメータグリッド = {
  18. "C" : [ 0.01 , 0.01 , 0.1 , 1.0 , 10.0 , 20.0 , 50.0 ],
  19. "ガンマ" : [ "スケール" , "自動" , 0.001 , 0.01 , 0.1 ],
  20. "カーネル" : [ "rbf" "poly" "sigmoid" ]
  21. }
  22. スコアリング = "f1_weighted"  
  23. CV = 10 です 
  24.  
  25. # ハイパーパラメータの最適化
  26. 開始 = 時間.時間()
  27. モデル = DistGridSearchCV(
  28. 分類子、param_grid、
  29. sc=sc、cv=cv、スコアリング=スコアリング、
  30. 詳細=True
  31. モデル.fit(X,y)
  32. print( "列車の時刻: {0}" .format(time.time() - start))
  33. print( "最高スコア: {0}" .format(model.best_score_))
  34.  
  35.  
  36. ------------------------------
  37. Spark コンテキストが見つかりました。Spark で実行しています
  38. 105の候補それぞれ10のフォールドを当てはめ、合計1050のフォールドを当てはめる
  39. 列車時間: 3.380601406097412  
  40. 最高スコア: 0.981450024203508  

この例は、データをメモリに適合させて単一の分類器をトレーニングすることは簡単ではないが、ハイパーパラメータの調整に必要な適合の数が急速に増加するという一般的な状況を示しています。上記の例の sk-dist のようなグリッド検索問題を実行する基本的なメカニズムは次のとおりです。

sk-dist を使用したグリッド検索

Ibotta での従来の機械学習の実際のアプリケーションでは、ハイパーパラメータ調整、アンサンブル、およびマルチクラス ソリューションに適した、多数の反復を伴う単純な分類器で構成される小規模から中規模のデータ (10 万から 100 万のレコード) などの同様の状況に遭遇することがよくあります。

既存のソリューション

従来の機械学習メタ推定トレーニングでは、既存のソリューションが分散されています。最初の方法は最も単純です。scikit-learn は joblib に組み込まれているメタ推定器の並列化を使用します。これは sk-dist と非常によく似ていますが、パフォーマンスが制限されるという 1 つの大きな制限があります。理論上は数百のコアを持つ単一のマシンであっても、Spark には、エグゼキューターの微調整されたメモリ仕様、フォールト トレランス、ワーカー ノードにスポット インスタンスを使用するなどのコスト管理オプションなどの利点があります。

もう一つの既存のソリューションは Spark ML です。これは、分類および回帰問題に対して scikit-learn と同じアルゴリズムの多くをサポートする Spark のネイティブ機械学習ライブラリです。また、ツリー アンサンブルやグリッド検索などのメタ推定機能や、マルチクラス問題のサポートも備えています。これは、scikit-learn スタイルの機械学習ワークロードを分散するための優れたソリューションのように思えるかもしれませんが、その分散トレーニングでは、私たちが関心を持っている並列処理の問題を解決できません。

異なる次元に分散

上記のように、Spark ML は複数のエグゼキューターに分散されたデータに対して単一のモデルをトレーニングします。このアプローチは、データが大きく、単一のマシンのメモリに収まらない場合に適しています。ただし、データが少ない場合は、単一のコンピューターでは scikit-learn ほどのパフォーマンスが得られない可能性があります。さらに、ランダム フォレストをトレーニングする場合、Spark ML は各決定木を順番にトレーニングします。タスクに割り当てられたリソースに関係なく、このタスクのハングタイムは決定木の数に比例して増加します。

グリッド検索の場合、Spark ML は単一のモデルを並列にトレーニングする並列処理パラメータを実装します。ただし、個々のモデルは、引き続きエグゼキュータ全体に分散されたデータに基づいてトレーニングされます。タスクの合計並列性は、データではなくモデルの次元によって分散された場合に比べてほんのわずかになる可能性があります。

最終的には、Spark ML とは異なる次元にトレーニングを分散したいと考えています。小規模または中規模のデータを扱う場合、データをメモリに収めることは問題ではありません。ランダム フォレストの例では、トレーニング データ全体を各エグゼキュータにブロードキャストし、各エグゼキュータに独立した決定木を適合させ、適合した決定木をドライバー プログラムに返してランダム フォレストを構築します。この次元に沿って分散すると、データをシリアルに分散して決定木をトレーニングするよりも桁違いに高速になります。この動作は、グリッド検索やマルチクラスなどの他のメタ推定手法と同様です。

特徴

私たちの問題領域におけるこれらの既存のソリューションの限界を考慮して、sk-dist を社内で開発することにしました。最も重要なことは、「データではなくモデルを配布する」ということです。

sk-dist はメタ推定器の分散トレーニングに重点を置いており、Spark を使用した scikit-learn モデルの分散予測用のモジュール、Spark を使用せずに前処理/後処理するためのいくつかの scikit-learn コンバーター、および Spark の有無にかかわらず使用できる柔軟な機能エンコーダーも含まれています。

分散トレーニング: Spark を使用してメタ推定器のトレーニングを分散します。サポートされているアルゴリズムは、ハイパーパラメータ調整 (グリッド検索とランダム検索)、決定木アンサンブル (ランダムフォレスト、追加ランダムツリー、ランダムツリー埋め込み)、およびマルチクラス手法 (1 対すべてと 1 対 1) です。

分散予測: Spark DataFrames を使用した scikit-learn 推定器の予測方法の分散フィッティング。大規模な分散予測は、Spark の有無にかかわらず使用できるポータブルな scikit-learn 推定器を通じて実現できます。

特徴エンコーディング: Encoderizer と呼ばれる柔軟な特徴トランスフォーマーを使用した分散特徴エンコーディング。 Spark 並列化の有無にかかわらず使用できます。データの種類と形状を推測し、標準的な機能エンコーディング手法の最も予測しやすい実装としてデフォルトの機能トランスフォーマーを自動的に適用します。また、完全にカスタマイズ可能な機能ジョイント エンコーダーとしても使用でき、Spark 分散トランスフォーマーと連携できるという利点も追加されます。

ユースケース

sk-dist が機械学習の問題空間に適しているかどうかを判断するためのガイドラインを次に示します。

従来の機械学習: 一般化線形モデル、確率的勾配降下法、最近傍アルゴリズム、決定木、および単純ベイズは、sk-dist に適しています。これらはすべて scikit-learn で利用可能であり、sk-dist メタ推定器を使用して直接実装できます。

小規模から中規模のデータ: 大規模なデータは sk-dist には適していません。トレーニング分布の次元はデータではなくモデルに応じて変化することに注意してください。データは各エグゼキュータのメモリに収まるだけでなく、ブロードキャストできるほど小さくなければなりません。 Spark の構成によっては、最大ブロードキャスト サイズが制限される場合があります。

Spark の場所とアクセス: sk-dist のコア機能を実行するには Spark が必要です。これは、個人や小規模なデータ サイエンス チームにとって必ずしも実現可能ではありません。さらに、sk-dist を最大限に活用するには、Spark のチューニングと構成が必要であり、そのためには Spark の基礎に関するトレーニングも必要です。

ここで重要な注意点は、ニューラル ネットワークとディープ ラーニングは技術的には sk-dist で使用できますが、これらの手法を効果的に使用するには大量のトレーニング データと、場合によっては特殊なインフラストラクチャが必要になることです。深層学習は上記(1)と(2)に違反するため、sk-distの使用目的には適していません。 Ibotta では、Amazon SageMaker でこれらのテクノロジーを使用してきましたが、これらのワークロードでは Spark を使用するよりも計算効率が高いことがわかりました。

<<:  データが多すぎたり、乱雑すぎたり、複雑すぎたりしていませんか?このようなデータガバナンスプロセスが必要です

>>:  アリババAIは1日1兆回以上呼び出され、中国を代表する人工知能企業に

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

2024年の最大の落とし穴は?ディープラーニングに基づくエンドツーエンドの自動運転の最新レビュー

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

テクノロジートレンド: 2024 年に流行するものは何でしょうか?

人々は、たとえすべてを正しく行えなかったとしても、毎年年末には必ず将来を楽しみにするものです。今年は...

推論効率は ControlNet の 20 倍以上です。 Google、モバイルデバイスで利用可能な画像生成制御モデル「MediaPipe Diffusion」プラグインをリリース

近年、拡散モデルはテキストから画像への生成において大きな成功を収め、画像生成品質の向上、推論パフォー...

電子商取引検索における人工知能技術の応用

常に注目度の高い人工知能分野に関連するアプリケーションは、常に大きな注目を集めています。人工知能は電...

成長痛に遭遇: 2017 年の AI およびビッグデータ業界のレビュー

2017 年、人工知能とビッグデータの開発では次の 10 の成長痛が発生しました。 [[216307...

プリンストン・インフィニゲン・マトリックスが始動! AI Creatorが爆発するほどリアルな100%自然を創造

ネオは、自分が住んでいる世界が現実ではなく、綿密に設計されたシミュレーションであることを発見します。...

...

人工知能は伝染病の予防と制御に役立ちます。正確にスクリーニングし、伝染病を推測し、ウイルスの発生源を追跡することができます。

感染予防・抑制の過程では、高リスクグループとスーパースプレッダーを迅速に特定し、感染の進行状況を正確...

GPT-4 が「Who is the Undercover」ボードゲームに大混乱を引き起こします。会話はリアルだが、人間らしさにはまだ改善の余地がある

生成 AI 研究が新たな活力を得ています。韓国チームは、GPT に「Spyfall」と呼ばれるギャン...

「ブラックボックス」アルゴリズムの下ではAIへの信頼は疑わしいが、説明可能なAIは開発の「最初の年」を迎える

天才は左にいて、狂人は右にいます。天才と狂気の間にはわずかな境界線しかありません。 AIに関しては、...

李開復:将来、名ばかりの職業10種

[[244632]]今後 30 年間で、人工知能は、現在人間が理解していない多くの社会現象を引き起こ...

PyTorch から Mxnet まで、7 つの主要な Python ディープラーニング フレームワークを比較

[[184728]]最近、Data Science Stack Exchange の「ニューラル ネ...

...