トレーニング時間をGPU加速で数分に変える あなたが機械学習の実践者であれば、あなたはこのシーンをよく知っています。 あなたは何時間もデータを争い、完璧な機能をエンジニアリングし、あなたの実験を慎重に設計してきました。 ヒット入り。 model.fit(X, y) そして・・・待ってます。 プロセスバーは氷の速さで前進します. あなたはコーヒーを飲みます. あなたはスラックをチェックします. あなたは戻って来ます. あなたのCPUはまだ離れています。 遅いトレーニングは動きを殺します. あなたは機能をテストし、ハイパーパラメータを調節し、問題に頭を置くことはできません。 機械学習の最も高価な部分はあなたの時間です。 XGBoostは、グレディエントの強化のパワーハウスとしての評判を獲得しました。それはテーブルデータセットのゴールドスタンダードです。しかし、その強さはコストを伴います。あなたが何百万の行までスケールするとき、トレーニング時間ボールは数分から数時間になります。 ほとんどの実践者は、XGBoost にこの体験を変えることができる単一のパラメータがあることに気づいていません。Flip it, and your model can train 5–15x faster. No algorithm changes. No new libraries. Just one line in your config. あなたのモデルは、5~15倍速くトレーニングできます。 この1つの変更は、1日で1つの実験を完了して、いくつかの実行に至ります。 かつて数日間続いたハイパーパラメーター検索は、今では数時間にわたって包まれています。 多くの場合、CUDAの加速は、仕事を終わらせることと、それを決して終わらせることの違いを作ります。 The “Magic” Parameter: GPU Acceleration Made Easy(「魔法」のパラメータ) XGBoost には NVIDIA CUDA の内蔵サポートがありますので、GPU アクセラレーションをタップすることは、新しいライブラリやコードの書き換えを必要としません。 以下は典型的なCPUワークフローです。 import xgboost as xgb model = xgb.XGBClassifier( ... tree_method="hist" # CPU training ) model.fit(X_train, y_train) あなたのGPUを使用するには、あなたは単に変更します。 2位 : tree_method "gpu_hist" import xgboost as xgb model = xgb.XGBClassifier( ... tree_method="gpu_hist" # GPU training ) model.fit(X_train, y_train) もしくは復帰者にとっては、セット : device="cuda" import xgboost as xgb xgb_model = xgb.XGBRegressor(device="cuda") xgb_model.fit(X, y) それがそれ。 XGBClassifier または XGBRegressor を使用している場合、 XGBoost が利用可能な NVIDIA GPU リソースをすべて使用するように指示します. この単一の変更により、大規模なデータセットでトレーニングを 5 ~ 15 倍速くできます。 device="cuda" 「The Proof: A 46x Speed-up on Amex Default Prediction」 アクションのスピードアップを示すために、我々は313の機能を含むAmerican Express Default Predictionデータセットの550万行(50giga)のサブセットにXGBoost分類器をベンチマークしました。 モデルを2つの構成でトレーニングしました。 CPU: M3 Pro 12コア CPU GPU:NVIDIA A100 GPU 以下、トレーニング時間の比較です。 結果は劇的: CPUトレーニング時間:27分 NVIDIA GPU トレーニング時間: 35 秒 ほぼ同一のパフォーマンスを達成する。 50Mまたは500Mの行では、CPU時間は数日間延長することができ、GPUは巨大な並列ワークロードのために構築され、成長を最小限の追加時間で処理します。 R2、RMSE、MAEのようなメトリックの違いは、ベースラインモデルや調節されたモデルのいずれかにかかわらず、最小限です。 予測力の面では、両方のモデルは一つに合意している。 最も重要な特徴であり、そして、 しかもトップ5を挙げているが、それに加え、彼らは分裂し始める。 P-2_last B_1_last CPUモデルは、 最新の値に焦点を当て、GPU モデルは合計値を好みます。 特徴像 ・B そして、 , CPUがトップ5に決してランクしていない機能。 _last _mean P-2_mean -22_mean B-1_mean これは仮説を示す:CPUモデルは短期的なリスク信号をキャプチャし、最近の出来事に反応する一方で、GPUモデルは長期的なパターンをキャプチャし、顧客のリスクを全体の歴史を通して評価する。 また、さらに大きいテラバイト規模のデータセットで、GPUは、より多くのデータを同時に処理する能力のおかげで、わずかに優れたメトリクスを備えたモデルを生成することができると期待しています。 コードを実行して、このパフォーマンスの違いを見る . Try It Yourself: ノートブック ノートブック ノートブック GPU 加速のためのベスト プラクティス 追加 GPU アクセラレーションを最大限に活用するには、以下のベスト プラクティスを念頭に置いてください。 device="cuda" 正しいサイズのデータから始める GPU アクセラレーションは、システムの RAM から GPU メモリにデータを移動するためのオーバーヘッドを正当化するのに十分な大きさのデータセットで最適です。 非常に小さいデータセットの場合、GPUにデータを転送し、並行計算を設定するのに費やされた時間は、実際にトレーニング時間を超え、これらの場合にCPUトレーニングを速くする可能性があります。 「Mind Your VRAM: Fit Your Data in GPU Memory」 GPU には独自の高速メモリ、VRAMと呼ばれ、システム RAM から別々に構成されています。標準的なトレーニングのために、データセットは完全に VRAM に適合する必要があります。 コマンド nvidia-smi 原則として、DataFrame が 10 GB のシステム RAM を使用している場合は、10 GB 以上の VRAM を備えた GPU が必要です。大規模なワークロードの場合、NVIDIA A10G (24 GB) または A100 (40-80 GB) のような GPU は一般的な選択肢です。 データ型を最適化してメモリ足跡を減らす VRAM を保存する最も簡単な方法の 1 つは、より効率的なデータタイプを使用することです Pandas は、通常必要以上に正確な 64 ビットタイプ (float64, int64) にデフォルトします。 コラムを 32 ビット型(float32, int32)に変換すると、モデルの精度に影響を及ぼさずにメモリの使用量を約半分に削減できます。 この小さな調整は、GPU上で大きなデータセットで作業するときに大きな違いを生むことができます。 df['my_column'].astype('float32') Go End-to-End: Accelerate Data Prep with cudf.pandas をダウンロード しばしば、最大のボトルネックは、トレーニング自体ではなく、データを準備することです。CPUとGPUメモリ間でデータを移動すると、ワークフローを遅らせることができるオーバーヘッドが追加されます。 library は、panda に GPU 駆動の drop-in 代替を提供することによって、この問題を解決します。 cudf.pandas インポートでスクリプトを開始する すべてのデータロードおよび機能エンジニアリング操作は GPU で直接実行されます。この GPU ネイティブの DataFrame を XGBoost に転送すると、転送オーバーヘッドを排除し、巨大なエンド-to-エンド スピードアップを達成します。 cudf.pandas as pd VRAM より大きいデータセットの場合:外部メモリを使用する データセットが 100 GB だが GPU に VRAM が 24 GB しかない場合はどうでしょうか? XGBoost 3.0 では、外部メモリのサポートにより、システムメモリまたはディスクからデータをパーツとして処理できます。 Beyond VRAM: XGBoost 3.0 でテラバイト規模のデータセットをトレーニング かつて、GPU の VRAM よりも大きいデータセットは、加速トレーニングのための厳しい制限でした. あなたはデータをサンプルダウンするか、またはより遅い CPU ベースのワークフローに戻らなければなりませんでした。 XGBoost 3.0 のリリースは、この障壁を新たに解消します。 これにより、システムメモリやディスクから直接GPUにデータをストリーミングして膨大なデータセットをトレーニングできます。 external memory capability これにより、1 つの GPU でテラバイト規模のワークロードをスケーラブルに拡張可能にし、これまで大きな分散型クラスターを必要としていました。NVIDIA Grace Hopper Superchip のような近代的なハードウェアでは、このアプローチは、完全なパフォーマンスと精度を維持しながら、複数のコア CPU システムよりも最大 8 倍速です。 この機能は Scikit-Learn ウラッパーではなくコア DMatrix オブジェクトで動作しますが、パラメータはよく知られています。 組合せるとき データの準備のために、テラバイト規模のデータセットのワークフロー全体がGPUで実行できます。 cudf.pandas 時間の返し方 機械学習では、最大のコストは待つ時間です. モデルがトレーニングされるのを待つこと、データが処理されるのを待つこと、または実験が完了するのを待つことによって、アイデアをテストし、洞察を発見し、価値を創造する能力が遅くなります。 NVIDIA GPU アクセラレーションにより、その時間を回収できます。 単一のパラメータ変更で、モデルを5〜15倍速くトレーニングし、GPU上でエンドトップデータパイプラインを実行し、GPUのメモリよりも大きいデータセットで作業することもできます。 ツールは準備ができ、統合はシームレスで、セットアップはシンプルです。より速いイテレーションは、より多くの実験、より多くの発見、そして最終的にはより良いモデルを意味します。 ここから、あなたは潜入するいくつかの異なる方法があります: NVIDIAのノートブックに従って、ステップアップガイドをご覧ください。 YouTubeビデオで完全なウォークアウトを見てください。 Dive into the official __XGBoost Documentation t__o explore all cuda configuration options.GPU Acceleration Made Ea ノートブック ノートブック YouTube ビデオ YouTube ビデオ 「Run My Amex」 Run My Amex そして、あなたのワークフローがどれだけ速くなるかを感じてください。 , ノート , ノート ノート ハッピービル、 パロ