カスタム スキルを効率的にスケールアウトする
カスタム スキルは、特定のインターフェイスを実装する Web API です。 カスタム スキルは、パブリックにアドレス指定可能なリソースに実装できます。 カスタム スキルの最も一般的な実装は次のとおりです。
- カスタム ロジック スキルのための Azure Functions
- コンテナー化されたシンプルな AI スキルのための Azure Web アプリ
- より複雑で大きなスキルのための Azure Kubernetes サービス。
スキルセットの構成
カスタム スキルの次のプロパティは、スケーリングに使用されます。 カスタム スキルで実装する必要がある入出力の概要については、カスタム スキル インターフェイスに関する記事を参照してください。
カスタム スキルの
batchSize
を設定して、スキルの 1 回の呼び出しでスキルに送信されるレコードの数を構成します。degreeOfParallelism
を設定して、インデクサーがスキルに対して実行する同時要求の数を調整します。timeout
に、スキルが有効な応答で応えるのに十分な値を設定します。indexer
の定義で、batchSize
に、データ ソースから同時に読み取って強化する必要があるドキュメントの数を設定します。
考慮事項
"すべてに対応できる" おすすめの方法はありません。 最適な結果を得るためには、さまざまな構成のテストを計画する必要があります。 スケールアップ戦略は、少数の大きな要求、または多数の小さな要求に基づいています。
スキル呼び出しのカーディナリティ: カスタム スキルがドキュメントごとに 1 回実行されるのか (
/document/content
)、複数回実行されるのか (/document/reviews_text/pages/*
) を確認してください。 ドキュメントごとに複数回複数回実行される場合は、batchSize
とdegreeOfParallelism
の低い方を維持することで中断を減らし、インデクサーのバッチ サイズを段階的に大きな値に設定してみてください。カスタム スキル
batchSize
とインデクサーbatchSize
を調整し、ボトルネックを作らないようにしてください。 たとえば、インデクサーのバッチ数が 5、およびスキルのバッチ数が 50 である場合は、1 つのカスタム スキル要求を入力するために 10 個のインデクサー バッチが必要になります。 スキルのバッチ サイズは、インデクサーのバッチ サイズ以下にするのが理想的です。degreeOfParallelism
の場合は、インデクサー バッチの要求の平均数を使用することで、この値の設定方法を決定できます。 スキルをホストしているインフラストラクチャ (例: Azure 関数) で、高レベルの同時実行がサポートされない場合は、並列処理の次数を下げることを検討してください。 いくつかのドキュメントを使用して構成をテストし、要求の平均数の理解度を検証することができます。目的はスケーリングと大容量のサポートですが、より少ないドキュメントのサンプルでテストを行うことで、実行のさまざまな段階を定量化するのに役立ちます。 たとえば、ドキュメントの処理にかかった全時間に対し、スキルの実行時間を評価することができます。 これは、インデクサーでバッチを作成する時間とスキルからの応答を待つ時間では、どちらのほうが長いかという質問に答えるのに役立ちます。
並列処理の上流への影響を考慮してください。 カスタム スキルへの入力が前のスキルからの出力である場合、スキルセット内のすべてのスキルは、待機時間を最小限に抑えるために効率的にスケールアウトされるか。
カスタム スキルでのエラー処理
スキルが正常に完了した場合、カスタム スキルでは成功の状態コード HTTP 200 を返す必要があります。 バッチ内の 1 つまたは複数のレコードでエラーが発生した場合は、マルチステータス コード 207 を返すことを検討してください。 レコードのエラーまたは警告の一覧には、適切なメッセージが含まれている必要があります。
バッチ内の項目でエラーが発生すると、対応するドキュメントは失敗します。 ドキュメントを成功させる必要がある場合は、警告を返します。
299 を超える状態コードはエラーとして評価され、すべてのエンリッチメントが失敗し、ドキュメントが失敗します。
一般的なエラー メッセージ
Could not execute skill because it did not execute within the time limit '00:00:30'. This is likely transient. Please try again later. For custom skills, consider increasing the 'timeout' parameter on your skill in the skillset.
: 実行時間が長くなるように、スキルに対して timeout パラメーターを設定します。Could not execute skill because Web Api skill response is invalid.
: カスタム スキルの応答形式でメッセージを返さないスキルがあることを示しています。 これは、スキルでキャッチされない例外が原因である可能性があります。Could not execute skill because the Web Api request failed.
: 認証エラーまたは例外が原因である可能性が最も高いです。Could not execute skill.
: 通常は、ドキュメント階層内の既存のプロパティにマップされるスキル応答が原因です。
カスタム スキルのテスト
初めに、REST API クライアントを使用してカスタム スキルをテストし、次の点について検証します。
スキルによって、要求と応答のカスタム スキル インターフェイスが実装されること
スキルによって MIME の種類
application/JSON
の有効な JSON が返されること有効な HTTP 状態 コードが返されること
スキルをスキル セットに追加するデバッグ セッションを作成し、有効なエンリッチメントが実現されることを確認します。 デバッグ セッションでは、スキルのパフォーマンスを調整することはできませんが、スキルが有効な値で構成されていること、および想定の強化されたオブジェクトが返されることは確認できます。
ベスト プラクティス
スキルでは、より大きなペイロードを受け入れて返すことができますが、JSON を返す場合は、応答を 150 MB 以下に制限することを検討してください。
インデクサーとスキルでバッチ サイズを設定して、各データ ソースのバッチでスキルの完全なペイロードが生成されるようにすることを検討してください。
長時間実行されるタスクについては、ドキュメントを同時に処理するときにインデクサーでエラーが発生しないように、タイムアウトを高い値に設定します。
インデクサーのバッチ サイズ、スキルのバッチ サイズ、および並列処理のスキル レベルを最適化して、スキルで想定されるロード パターンを生成したり、大きな要求の数を減らしたり、小さな要求の数を増やしたりします。
データの可変性が原因で特定の要求が一貫して失敗するというシナリオが発生する可能性があるため、詳細なエラー ログでカスタム スキルを監視します。