Parameter Server (PS) は、大規模なオフラインおよびオンラインのトレーニングタスク向けに設計されています。Scalable Multiple Additive Regression Tree (SMART) は、勾配ブースティング決定木 (GBDT) に基づく反復アルゴリズムであり、PS 上に実装されています。PS-SMART は、数百億のサンプルと数十万の特徴量を持つトレーニングタスクをサポートし、数千のノードで実行できます。また、複数のデータ形式や、ヒストグラム近似などの最適化技術もサポートしています。
制限事項
PS-SMART 多クラス分類コンポーネントの入力データは、次の要件を満たす必要があります。
-
ターゲット列は数値型のみをサポートします。MaxCompute テーブルのデータが STRING 型の場合、そのデータの型を変換する必要があります。たとえば、分類ターゲットが Good/Medium/Bad という文字列の場合、それらを 0/1/2 に変換する必要があります。
-
データが KV フォーマットの場合、特徴量 ID は正の整数、特徴量の値は実数である必要があります。特徴量 ID が文字列の場合は、シリアル化コンポーネントを使用してシリアル化できます。特徴量の値がカテゴリカルな文字列の場合は、特徴量の離散化などの特徴量エンジニアリングを実行できます。
-
PS-SMART 多クラス分類コンポーネントは、数十万の特徴量を持つタスクをサポートしますが、これらのタスクは大量のリソースを消費し、実行速度が遅くなります。GBDT アルゴリズムは、連続特徴量で直接トレーニングするのに適しています。したがって、低頻度の特徴量を除外するためにカテゴリカル特徴量に One-Hot エンコーディングを実行する場合を除き、他の連続する数値特徴量に対して離散化を実行しないでください。
-
PS-SMART アルゴリズムはランダム性を導入します。例としては、data_sample_ratio と fea_sample_ratio で示されるデータと特徴量のサンプリング、アルゴリズムが使用するヒストグラム近似の最適化、ローカルスケッチをグローバルスケッチにマージする際のランダムな順序などがあります。複数のワーカーが分散方式で実行される場合、木の構造は異なる可能性がありますが、モデルのパフォーマンスは理論的には類似しています。同じデータとパラメーターで複数回実行して、一貫性のない結果が得られるのは正常です。
-
トレーニングを高速化するために、計算コア数 を増やすことができます。ただし、PS-SMART アルゴリズムは、すべてのサーバーが必要なリソースを取得した後にのみトレーニングを開始します。したがって、クラスターがビジー状態のときにより多くのリソースをリクエストすると、待機時間が増加します。
注意事項
PS-SMART 多クラス分類コンポーネントを使用する際には、次の点にご注意ください。
-
PS-SMART 多クラス分類コンポーネントは、数十万の特徴量を持つタスクをサポートしますが、これらのタスクは大量のリソースを消費し、実行速度が遅くなります。GBDT アルゴリズムは、連続特徴量で直接トレーニングするのに適しています。したがって、低頻度の特徴量を除外するためにカテゴリカル特徴量に One-Hot エンコーディングを実行する場合を除き、他の連続する数値特徴量に対して離散化を実行しないでください。
-
PS-SMART アルゴリズムはランダム性を導入します。例としては、data_sample_ratio と fea_sample_ratio で示されるデータと特徴量のサンプリング、アルゴリズムが使用するヒストグラム近似の最適化、ローカルスケッチをグローバルスケッチにマージする際のランダムな順序などがあります。複数のワーカーが分散方式で実行される場合、木の構造は異なる可能性がありますが、モデルのパフォーマンスは理論的には類似しています。同じデータとパラメーターで複数回実行して、一貫性のない結果が得られるのは正常です。
-
計算コア数 を増やすことで、トレーニングを高速化できます。ただし、PS-SMART アルゴリズムは、すべてのサーバーが必要なリソースを取得した後にのみトレーニングを開始します。したがって、クラスターがビジー状態のときにより多くのリソースをリクエストすると、待機時間が増加します。
コンポーネントの構成
方法 1:GUI の使用
Designer のワークフローで、PS-SMART 多クラス分類 コンポーネントを追加し、右側のペインでそのパラメーターを構成します。
|
パラメータータイプ |
パラメーター |
説明 |
|
フィールド設定 |
スパース形式かどうか |
スパース形式の場合、スペースを使用して KV ペアを区切り、コロン (:) を使用して キー と 値 を区切ります。例:1:0.3 3:0.9。 |
|
特徴列 |
トレーニングに使用される入力テーブルの特徴列。入力データが密形式の場合、数値 (BIGINT または DOUBLE) 型の列のみを選択できます。入力データがスパース KV フォーマットで、キー と 値 が両方とも数値型の場合、STRING 型の列のみを選択できます。 |
|
|
ラベル列 |
入力テーブルのラベル列。STRING 型と数値型がサポートされています。内部ストレージでは、数値型のみがサポートされます。例:二項分類における 0 と 1。 |
|
|
重み列 |
各サンプル行の重み付けに使用される列。数値型のみがサポートされています。 |
|
|
パラメーター設定 |
クラス数 |
多クラス分類のクラス数。クラス数が n の場合、ラベル列の値は {0,1,2,...,n-1} である必要があります。 |
|
評価メトリクスタイプ |
サポートされているタイプは、多クラス負の対数尤度と多クラス分類エラーです。 |
|
|
木の数 |
木の数。正の整数である必要があります。トレーニング時間は木の数に比例します。 |
|
|
木の最大深度 |
デフォルト値は 5 で、最大 32 のリーフノードを意味します。 |
|
|
データサンプリング率 |
各木を構築する際に、データの一部をサンプリングして弱学習器を構築し、トレーニングを高速化します。 |
|
|
特徴量サンプリング率 |
各木を構築する際に、特徴量の一部をサンプリングして弱学習器を構築し、トレーニングを高速化します。 |
|
|
L1 ペナルティ係数 |
リーフノードのサイズを制御します。値が大きいほど、リーフノードのサイズの分布がより均一になります。過学習が発生した場合は、この値を増やしてください。 |
|
|
L2 ペナルティ係数 |
リーフノードのサイズを制御します。値が大きいほど、リーフノードのサイズの分布がより均一になります。過学習が発生した場合は、この値を増やしてください。 |
|
|
学習率 |
値は (0,1) の範囲内である必要があります。 |
|
|
近似スケッチ精度 |
スケッチを構築するための分位数しきい値。値が小さいほど、バケットの数が多くなります。通常は、デフォルト値の 0.03 を使用します。手動での構成は不要です。 |
|
|
最小分割損失変化 |
ノードを分割するために必要な最小損失変化。値が大きいほど、分割はより保守的になります。 |
|
|
特徴量数 |
特徴量の数または最大の特徴量 ID。リソース使用量を見積もるには、このパラメーターを構成する必要があります。 |
|
|
グローバルバイアス |
すべてのサンプルの初期予測値。 |
|
|
乱数ジェネレーターシード |
乱数シード。整数である必要があります。 |
|
|
特徴量重要度タイプ |
値は次のいずれかになります。
|
|
|
実行チューニング |
コア数 |
デフォルトでは、システムが自動的にコアを割り当てます。 |
|
コアあたりのメモリサイズ |
単一のコアが使用するメモリ (MB 単位)。通常、手動での構成は不要です。システムが自動的にメモリを割り当てます。 |
方法 2:PAI コマンドの使用
SQL スクリプトコンポーネントを使用して PAI コマンドを呼び出し、PS-SMART 多クラス分類 コンポーネントのパラメーターを構成できます。詳細については、「シナリオ 4:SQL スクリプトコンポーネントで PAI コマンドを実行する」をご参照ください。
--Train
PAI -name ps_smart
-project algo_public
-DinputTableName="smart_multiclass_input"
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545859_2"
-DoutputImportanceTableName="pai_temp_24515_545859_3"
-DlabelColName="label"
-DfeatureColNames="features"
-DenableSparse="true"
-Dobjective="multi:softprob"
-Dmetric="mlogloss"
-DfeatureImportanceType="gain"
-DtreeCount="5"
-DmaxDepth="5"
-Dshrinkage="0.3"
-Dl2="1.0"
-Dl1="0"
-Dlifecycle="3"
-DsketchEps="0.03"
-DsampleRatio="1.0"
-DfeatureRatio="1.0"
-DbaseScore="0.5"
-DminSplitLoss="0"
--Predict
PAI -name prediction
-project algo_public
-DinputTableName="smart_multiclass_input";
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545860_1"
-DfeatureColNames="features"
-DappendColNames="label,features"
-DenableSparse="true"
-DkvDelimiter=":"
-Dlifecycle="28"
|
モジュール |
パラメーター |
必須 |
デフォルト値 |
説明 |
|
データパラメーター |
featureColNames |
はい |
なし |
トレーニングに使用される入力テーブルの特徴列。入力テーブルが密形式の場合、数値 (BIGINT または DOUBLE) 型の列のみを選択できます。入力テーブルがスパース KV フォーマットで、KV フォーマットの キー と 値 が数値型の場合、STRING 型の列のみを選択できます。 |
|
labelColName |
はい |
なし |
入力テーブルのラベル列。STRING 型と数値型がサポートされています。内部ストレージでは、数値型のみがサポートされます。たとえば、多クラス分類の場合、値は {0,1,2,…,n-1} になります。ここで、n はクラス数です。 |
|
|
weightCol |
いいえ |
なし |
各サンプル行の重み付けに使用される列。数値型のみがサポートされています。 |
|
|
enableSparse |
いいえ |
false |
データがスパース形式であるかどうかを指定します。有効な値は {true,false} です。スパース形式の場合、スペースを使用して KV ペアを区切り、コロン (:) を使用して キー と 値 を区切ります。例:1:0.3 3:0.9。 |
|
|
inputTableName |
はい |
なし |
入力テーブルの名前。 |
|
|
modelName |
はい |
なし |
出力モデルの名前。 |
|
|
outputImportanceTableName |
いいえ |
なし |
特徴量重要度の出力テーブルの名前。 |
|
|
inputTablePartitions |
いいえ |
なし |
フォーマットは ds=1/pt=1 です。 |
|
|
outputTableName |
いいえ |
なし |
MaxCompute の出力テーブル。バイナリ形式であり、直接読み取ることはできません。SMART 予測コンポーネントによってのみアクセスできます。 |
|
|
lifecycle |
いいえ |
3 |
出力テーブルのライフサイクル。 |
|
|
アルゴリズムパラメーター |
classNum |
はい |
なし |
多クラス分類のクラス数。クラス数が n の場合、ラベル列の値は {0,1,2,...,n-1} である必要があります。 |
|
objective |
はい |
なし |
目的関数のタイプ。多クラス分類のトレーニングには、multi:softprob を選択します。 |
|
|
metric |
いいえ |
なし |
トレーニングデータセットの評価メトリクスタイプ。出力は、Logview ファイルの Coordinator エリアの stdout に書き込まれます。次のタイプがサポートされています。
|
|
|
treeCount |
いいえ |
1 |
木の数。トレーニング時間はこの値に比例します。 |
|
|
maxDepth |
いいえ |
5 |
木の最大深度。値は 1 から 20 の範囲内である必要があります。 |
|
|
sampleRatio |
いいえ |
1.0 |
データサンプリング率。値は (0,1] の範囲内である必要があります。値 1.0 はサンプリングなしを意味します。 |
|
|
featureRatio |
いいえ |
1.0 |
特徴量サンプリング率。値は (0,1] の範囲内である必要があります。値 1.0 はサンプリングなしを意味します。 |
|
|
l1 |
いいえ |
0 |
L1 ペナルティ係数。値が大きいほど、リーフノードのサイズの分布がより均一になります。過学習が発生した場合は、この値を増やしてください。 |
|
|
l2 |
いいえ |
1.0 |
L2 ペナルティ係数。値が大きいほど、リーフノードのサイズの分布がより均一になります。過学習が発生した場合は、この値を増やしてください。 |
|
|
shrinkage |
いいえ |
0.3 |
値は (0,1) の範囲内である必要があります。 |
|
|
sketchEps |
いいえ |
0.03 |
スケッチを構築するための分位数しきい値。バケットの数は O(1.0/sketchEps) です。値が小さいほど、バケットの数が多くなります。通常は、デフォルト値を使用します。手動での構成は不要です。値は (0,1) の範囲内である必要があります。 |
|
|
minSplitLoss |
いいえ |
0 |
ノードを分割するために必要な最小損失変化。値が大きいほど、分割はより保守的になります。 |
|
|
featureNum |
いいえ |
なし |
特徴量の数または最大の特徴量 ID。リソース使用量を見積もるには、このパラメーターを構成する必要があります。 |
|
|
baseScore |
いいえ |
0.5 |
すべてのサンプルの初期予測値。 |
|
|
randSeed |
いいえ |
なし |
乱数シード。整数である必要があります。 |
|
|
featureImportanceType |
いいえ |
gain |
計算する特徴量重要度のタイプ。以下が含まれます。
|
|
|
チューニングパラメーター |
coreNum |
いいえ |
システム割り当て |
コア数。値が大きいほど、アルゴリズムの実行速度が速くなります。 |
|
memSizePerCore |
いいえ |
システム割り当て |
各コアが使用するメモリ (MB 単位)。 |
モデルのデプロイ
PS-SMART コンポーネントによって生成されたモデルをオンラインサービスとしてデプロイするには、PS-SMART コンポーネントの下流に 汎用モデルエクスポート コンポーネントを追加します。コンポーネントのパラメーターは、他の PS シリーズのコンポーネントと同じ方法で構成します。詳細については、「汎用モデルエクスポート」をご参照ください。
実行が成功したら、PAI-EAS モデルオンラインサービス ページに移動してモデルサービスをデプロイします。詳細については、「コンソールでサービスをデプロイする」をご参照ください。