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兆回以上呼び出され、中国を代表する人工知能企業に

推薦する

TensorRT はどのようにしてより高速なアーキテクチャを実現するのでしょうか?

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

新しいモデルは99%の精度で、ChatGPTによって生成されたテキストコンテンツを認識できます。

IT Homeは11月8日、sciencedirectに掲載された最新の論文によると、科学者は20...

Sitechiは新たなブルーオーシャンを開拓し、中小企業市場に注力

Sitechi は、通信業界に特化したソフトウェア開発およびサービス プロバイダーです。業界で最も早...

OpenAI は PyTorch、TensorFlow を全面的に採用していますが、なぜそれほど優れていないのでしょうか?

TensorFlow と PyTorch フレームワーク間の戦いは長い間続いています。最近のニュー...

2022 年の優れたインテリジェント オートメーションのトレンドと予測

調査によると、2022年までにインテリジェントオートメーションのトレンドが拡大し、デジタル変革が急速...

...

AI エージェントに協力と競争を教えましょう。最初の大規模マルチエージェントフレームワークであるCAMELは3.6kのスターを獲得しました

「どんな魔法が私たちを賢くするのでしょうか?魔法は魔法がないことです。知性の力は、単一の完璧な原理か...

安全性は小さな問題ではありません。これがAI時代に彼らが選択することです

AI時代においては、セキュリティを早急に再定義する必要があります。人工知能やモノのインターネットなど...

人工知能は医療の未来をどう変えるのか

この病気の症状の多くは心配なものであり、めまいや不安感から始まることもあります。心臓のあたりがバクバ...

在庫: 2020 年の最もクールな AI チップ スタートアップ 10 社

AIチップをめぐる争いはインテルやエヌビディアなどの半導体大手の間で激化しているが、多くの中小企業も...

貪欲アルゴリズム: K回の反転後の配列の合計を最大化する

[[355496]]多くのレコーディング仲間が、昨日のトピック「貪欲アルゴリズム:ジャンピングゲーム...

あなたの仕事はAIに置き換えられるでしょうか?李開復氏は、これらの4種類の仕事について心配する必要はないと述べている。

[[255576]]最近、李開復氏はタイム誌に「人工知能は強力だが、誤解されている。労働者を守るに...

...

国内の多くの大学が共同でオープンソースコミュニティLAMMを構築しています。マルチモーダル言語モデルファミリーに参加する時が来ました

ChatGPTの登場以来、大規模言語モデル(LLM)は飛躍的な発展を遂げ、自然言語に基づく人間とコン...

35258 スター!これはITアーキテクトの技術知識マップのコレクションです

ソフトウェア アーキテクチャは、あらゆるソフトウェア プロジェクトの重要な部分になっています。アーキ...