カスタムモデルの作成¶
カスタムモデルは、ユーザーが作成して、モデルワークショップを介して(ファイルのコレクションとして)、DataRobotにアップロードできる事前トレーニング済みのモデルです。 カスタムモデルは、以下のうちいずれかの方法で構築できます。
-
アセンブルタブで、環境要件と
start_server.sh
ファイル なし でカスタムモデルを作成します。 このタイプのカスタムモデルはドロップイン環境を使用する必要があります。 ドロップイン環境には、モデルで使用される要件とstart_server.sh
ファイルが含まれます。 これらはワークショップ内のDataRobotによって提供されます。 -
アセンブルタブで、環境要件と
start_server.sh
ファイル あり でカスタムモデルを作成します。 このタイプのカスタムモデルは、カスタムまたはドロップイン環境と組み合わせることができます。
作業を続ける前に、 カスタムモデルの構築に関するガイドラインを確認してください。 カスタムモデルと環境フォルダーの間でファイルが重複している場合は、モデルのファイルが優先されます。
カスタムモデルのテスト
カスタムモデルのファイルコンテンツを組み立てると、DataRobotにアップロードする前に開発目的でローカルでコンテンツをテストできます。 ワークショップでカスタムモデルを作成した後、テストタブからテストスイートを実行できます。
新しいカスタムモデルの作成¶
構築の準備としてカスタムモデルを作成するには:
-
レジストリ > モデルワークショップをクリックします。 このタブには、作成したモデルが一覧表示されます。
-
+ モデルを追加(または、カスタムモデルパネルが開いている場合は ボタン)をクリックします。
-
モデルを追加ページで、モデルを設定のフィールドに入力します。
フィールド 説明 モデル名 カスタムモデルのわかりやすい名前。 ターゲットタイプ モデルが行っている予測のタイプ。 予測タイプに応じて、追加の設定を行う必要があります。 - 二値:二値分類モデルの場合は、PositiveクラスラベルとNegativeクラスラベルを入力します。
- 連続値:追加設定なし。
- 時系列(二値): プレビュー機能。 二値分類モデルの場合は、PositiveクラスラベルとNegativeクラスラベルを入力して 時系列設定を行います。
- 時系列(連続値)(プレビュー): 時系列設定を行います。
- 多クラス:多クラス分類モデルでは、ターゲットのターゲットクラスを1行に1クラスずつ入力またはアップロード(
.csv
、.txt
)します。 クラスがモデルの予測に正しく適用されるように、モデルが予測したクラスの確率と同じ順序でクラスを入力してください。 - テキスト生成:プレミアム機能。 追加設定なし。
- 異常検知:追加設定なし。
- 非構造化:追加設定なし。 非構造化モデルは、特定の入力/出力スキーマに準拠する必要はなく、異なる要求形式を使用する可能性があります。 「非構造化」ターゲットタイプのデプロイでは、予測ドリフト、精度追跡、チャレンジャー、および信頼性が無効になります。 サービスの正常性、デプロイアクティビティ、ガバナンスは引き続き利用できます。
ターゲット名 モデルが予測するデータセットの列名。 このフィールドは、多クラスモデルおよび異常検知モデルでは使用できません。 高度な設定 言語 モデルの構築に使用されるプログラミング言語。 説明 モデルのコンテンツと目的の説明。 -
フィールドに入力したら、モデルを追加をクリックします。
カスタムモデルがアセンブルタブで開きます。
時系列の設定¶
本機能の提供について
時系列カスタムモデルは、デフォルトではオフになっています。 この機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
機能フラグ:時系列のカスタムモデルを有効にする、カスタムモデルの予測で特徴量のフィルターを有効にする
二値分類および連続値モデルに必要なフィールドに加え、以下の時系列固有のフィールドを設定することによって時系列カスタムモデルを作成できます。 時系列カスタムモデルを作成するには、ターゲットタイプとして時系列(二値)または時系列(連続値)を選択し、モデルの作成中に次の設定を行います。
フィールド | 説明 |
---|---|
日付/時刻特徴量 | 指定された予測行の日付/時刻値を含むトレーニングデータセット内にある列。 |
日付/時刻形式 | 日付/時刻特徴量列と予測ポイント特徴量列の両方の値の形式。GNU Cライブラリ形式のすべての可能な値のドロップダウンリストとして提供されます。 |
予測ポイントの特徴量 | 予測の作成に使用する ポイントを含む、トレーニングデータセット内にある列。 |
予測単位 | 時間ステップで使用される時間単位(秒、日、月など)。可能なすべての値のドロップダウンリストとして提供されます。 |
系列ID特徴量 | オプション。 複数系列モデルの場合、各行が属する系列を識別するトレーニングデータセット内にある列を入力します。 |
時系列カスタムモデルで リアルタイム予測を行う場合、予測回答のCSVシリアル化では、モデルから返される追加の列(予測結果以外)には、サフィックス_OUTPUT
を含む列名が付けられます。
時系列カスタムモデルに関する注意事項
時系列カスタムモデルの制約を以下に示します。
-
チャレンジャーとして選択することはできません。
-
カスタムモデルのテスト中は、モデルの起動テストのみがサポートされます。
-
バッチ予測ではなく、 リアルタイム予測をサポートします。
-
ポータブル予測サーバー(PPS)はサポートしていません。
異常検知モデルの設定¶
異常検知の問題をサポートするカスタムモデルを作成できます。 構築する場合は、DRUMテンプレートを参照してください。 (このリンクをクリックする前にGitHubにログインしてください。)カスタム異常検知モデルをデプロイする場合、次の機能はサポートされていないことに注意してください。
- データドリフト
- 精度と関連付けID
- チャレンジャーモデル
- 信頼性ルール
- 予測の説明
カスタムモデルの構築¶
カスタムモデルを作成した後、必要な環境、依存関係、ファイルを指定できます。
-
構築するモデルで、アセンブルタブの環境セクションに移動し、基本環境ドロップダウンメニューからモデル環境を選択します。
モデル環境
モデル環境は、カスタムモデルのテストとデプロイに使用されます。 基本環境ドロップダウンリストには、 ドロップインモデル環境と、作成可能な カスタム環境が含まれています。
-
依存関係セクションに入力するために、ファイルセクションで
requirements.txt
ファイルをアップロードし、DataRobotが最適なイメージを構築できるようにします。 -
ファイルセクションで、必要なカスタムモデルファイルを追加します。 モデルとドロップイン環境をペアリングしていない場合、これにはカスタムモデル環境要件と
start_server.sh
ファイルが含まれます。 ファイルの追加方法はいくつかあります。要素 説明 1 ファイル ファイルをグループボックスにドラッグしてアップロードします。 2 ソースから選択 クリックしてローカルファイルまたはローカルフォルダーを参照します。 3 アップロード クリックしてローカルファイルまたはローカルフォルダーを参照するか、 リモートリポジトリからファイルをプルします。 4 作成 空のファイルまたはテンプレートとして新しいファイルを作成し、カスタムモデルに保存します。 - model-metadata.yamlを作成:ランタイムパラメーターファイルの基本的で編集可能な例を作成します。
- 空白ファイルを作成:空のファイルを作成します。 名称未設定の横にある編集アイコン()をクリックしてファイル名と拡張子を入力し、カスタムコンテンツを追加します。
ファイルの置き換え
既存のファイルと同じ名前の新しいファイルを追加する場合、保存をクリックすると、ファイルセクションで古いファイルが置き換えられます。
モデルファイルの場所
ローカルフォルダーからファイルを追加する場合は、モデルファイルがすでにカスタムモデルのルートにあることを確認してください。 アップロードされたフォルダーは、モデル自体ではなく、モデルに必要な依存ファイルおよび追加のアセット用です。 モデルファイルがフォルダーに含まれている場合でも、ファイルがルートレベルに存在しない限り、DataRobotからモデルファイルにアクセスすることはできません。 ルートにあるファイルは、フォルダー内の依存関係を指定することができます。
アセンブルタブのファイルセクションで1つ以上のファイルまたはフォルダーを誤って追加した場合は、各ファイルまたはフォルダーの横にある削除()アイコンをクリックして、カスタムモデルから削除できます。
リモートリポジトリ¶
ファイルセクションで、アップロード > リモートリポジトリをクリックすると、リモートリポジトリからコンテンツを追加パネルが開きます。 リモートリポジトリをクリックして、 新しいリモートリポジトリを登録(A)するか、既存のリモートリポジトリを選択(B)できます。
リポジトリを登録して選択した後、アップロードする各ファイルまたはフォルダーのチェックボックスを選択して、コンテンツを選択するをクリックします。
選択したファイルがファイルセクションに入れられます。
ドロップイン環境¶
DataRobotでは、モデルワークショップでドロップイン環境が使用でき、必要なライブラリを定義してstart_server.sh
ファイルが使用できます。 次の表に、DataRobotのドロップイン環境の詳細とDRUMリポジトリ内のテンプレートへのリンクを示します。 モデルワークショップのアセンブルタブの環境セクションでは各環境の前に[DataRobot]が置かれます。
環境名と例 | モデルの互換性とアーティファクトファイルの拡張子 |
---|---|
Python 3 ONNXドロップイン | ONNXモデル(.onnx ) |
Python 3 PMMLドロップイン | PMMLモデル(.pmml ) |
Python 3 PyTorchドロップイン | PyTorchモデル(.pth ) |
Python 3 Scikit-Learnドロップイン | Scikit-Learnモデル(.pkl ) |
Python 3 XGBoostドロップイン | ネイティブXGBoostモデル(.pkl ) |
Python 3 Kerasドロップイン | TensorFlow(.h5 )を用いたKerasモデル |
Javaドロップイン | DataRobotスコアリングコードモデル(.jar ) |
ドロップイン環境 | CARET(.rds )を使ってトレーニングされたRモデルCARETが推奨するすべてのライブラリをインストールするのに時間がかかるため、パッケージ名でもあるモデルタイプのみがインストールされます(例: brnn 、glmnet )。 この環境のコピーを作成し、Dockerfileを修正して、必要なパッケージを追加でインストールします。 この環境をカスタマイズする際のビルド回数を減らすために、# Install caret models セクションで不要な行を削除して、必要なものだけをインストールすることもできます。 CARETドキュメントを参照して、モデルの手法がパッケージ名と一致しているかどうかを確認してください。 このリンクをクリックする前にGitHubにログインしてください。 |
Juliaドロップイン* | Juliaモデル(.jlso )* Juliaのドロップイン環境は公式にはサポートされていません。例として提供されています。 |
備考
すべてのPython環境には、前処理(必要な場合)を支援するScikit-Learnが含まれていますが、sklearnモデルで予測を作成できるのはScikit-Learnだけです。
ドロップイン環境を使用する場合、カスタムモデルコードは、 DataRobotクライアントと MLOps Connected Clientへのアクセスを容易にするために挿入された複数の環境変数を参照できます。
環境変数 | 説明 |
---|---|
MLOPS_DEPLOYMENT_ID |
カスタムモデルがデプロイモードで実行されている場合(カスタムモデルがデプロイされている場合)、デプロイIDを使用できます。 |
DATAROBOT_ENDPOINT |
カスタムモデルに パブリックネットワークアクセスがある場合、DataRobotエンドポイントURLを使用できます。 |
DATAROBOT_API_TOKEN |
カスタムモデルに パブリックネットワークアクセスがある場合、DataRobot APIトークンを使用できます。 |
評価とモデレーションを設定¶
本機能の提供について
評価とモデレーションのガードレールは、デフォルトではオフになっています。 この機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
機能フラグ:モデレーションのガードレールを有効にする、モデルレジストリでグローバルモデルを有効にする(プレミアム)、予測応答で追加のカスタムモデル出力を有効にする
評価とモデレーションのガードレールは、組織がプロンプトインジェクションや、悪意のある、有害な、または不適切なプロンプトや回答をブロックするのに役立ちます。 また、ハルシネーションや信頼性の低い回答を防ぎ、より一般的には、モデルをトピックに沿った状態に保つこともできます。 さらに、これらのガードレールは、個人を特定できる情報(PII)の共有を防ぐことができます。 多くの評価およびモデレーションガードレールは、デプロイされたテキスト生成モデル(LLM)をデプロイされたガードモデルに接続します。 これらのガードモデルはLLMのプロンプトと回答について予測し、これらの予測と統計を中心的なLLMデプロイに報告します。 評価とモデレーションのガードレールを使用するには、まず、LLMのプロンプトや回答について予測するガードモデルを作成してデプロイします。たとえば、ガードモデルは、プロンプトインジェクションや有害な回答を識別することができます。 次に、ターゲットタイプがテキスト生成のカスタムモデルを作成する場合、評価とモデレーションのガードレールを1つ以上定義します。
評価およびモデレーションガードレールを選択および設定するには、テキスト生成ターゲットタイプのカスタムモデルのアセンブルタブで、評価とモデレーションまでスクロールして、 設定をクリックします。
評価とモデレーションを設定パネルで、指標カードをクリックし、必要なプロパティを設定してから、追加をクリックして評価タブに戻ります。
別の指標を選択するか、次へをクリックしてモデレーションタブに進み、モデレーション戦略を設定します。
テキスト生成カスタムモデルにガードレールを追加した後、モデルを テスト、 登録、および デプロイして本番環境で予測を作成できます。 予測を作成した後、 [カスタム指標 ] (nxt-custom-metrics) タブで評価指標を表示し、 データ探索タブでプロンプト、回答、およびフィードバック(設定されている場合)を表示できます。
詳細については、 評価とモデレーションの設定を参照してください。
ランタイムパラメーターの管理¶
model-metadata.yaml
ファイルのruntimeParameterDefinitions
によりランタイムパラメーターを定義した場合、ランタイムパラメーターセクションでそれらを管理できます。
アイコン | 設定 | 説明 |
---|---|---|
編集 | キーを編集ダイアログボックスを開き、ランタイムパラメーターの値を編集します。 | |
初期値に戻す | ランタイムパラメーターの値をmodel-metadata.yaml ファイル内のdefaultValue セットにリセットします。 |
defaultValue
のない定義で、ランタイムパラメーターにallowEmpty: false
がある場合は、カスタムモデルを登録する前に値を設定する必要があります。
ランタイムパラメーターを定義し、カスタムモデルコードで使用する方法の詳細については、 カスタムモードのランタイムパラメーターの定義に関するドキュメントを参照してください。
カスタムモデルデータセットの割り当て¶
モデルデプロイで特徴量ドリフト追跡を有効にするには、トレーニングデータを追加する必要があります。 これを行うには、モデルのバージョンにトレーニングデータを割り当てます。 非構造化カスタム推論モデルのトレーニングデータセットとホールドアウトデータセットを指定する方法では、トレーニングデータセットとホールドアウトデータセットを個別にアップロードする必要があります。 さらに、これらのデータセットにはパーティション列を含めることはできません。
ファイルサイズに関する注意
DataRobotにアップロードされるカスタムモデルトレーニングデータのファイルサイズの上限は1.5GBです。
環境とファイルを定義した後にカスタムモデルにトレーニングデータを割り当てるには:
-
アセンブルタブの設定セクションのデータセットの下:
-
モデルのバージョンにトレーニングデータが割り当てられていない場合は、割り当てるをクリックします。
-
モデルバージョンにトレーニングデータが 割り当てられている 場合は、()変更をクリックし、トレーニングデータの下で削除()アイコンをクリックして、既存のトレーニングデータを削除します。
-
-
トレーニングデータセクションで、+ データセットを選択をクリックして、次のいずれかを実行します。
-
新しいデータセットをデータレジストリに追加するには、アップロードをクリックし、ローカルストレージからファイルを選択して、開くをクリックします。
-
データレジストリから既存のデータセットを選択するには、データレジストリリストで、DataRobotに以前アップロードしたトレーニングデータセットを見つけてクリックし、データセットを選択をクリックします。
スコアリングに必要な特徴量を含める
カスタムモデルのトレーニングデータの列は、デプロイされたカスタムモデルへのスコアリングリクエストにどの特徴量が含まれるかを示します。 したがって、トレーニングデータが利用可能になると、トレーニングデータセットに含まれない特徴量はモデルに送信されません。 プレビュー機能として利用可能で、 列フィルター設定を使用して、この動作を無効にできます。
-
-
(オプション)パーティション列セクションで、(トレーニング/検定/ホールドアウトのパーティショニングに基づいて)データのパーティショニング情報を含む列名(そこにあるトレーニングデータセットから)を指定します。 カスタムモデルをデプロイし、そのデータドリフトと精度を監視する予定であれば、列にホールドアウトパーティションを指定して、精度のベースラインを確立します。
パーティション列を必要とする機能
以下の状況では、パーティション列を指定する必要があります。
-
カスタムモデルで予測の説明を有効にする
XEMPベースの説明のみがサポートされており、計算するには、重複していない行が検定セットに少なくとも100行必要です。 予測の説明の要件については、XEMPに関する注意事項を参照してください。
-
ドリフトと精度の追跡でベースラインを指定する
パーティション列を指定しなくても、データのドリフトと精度を追跡できます。ただし、この場合、DataRobotにベースライン値はありません。 選択されたパーティション列は
T
、V
、H
のいずれかの値のみを含む必要があります。
-
-
割り当てるをクリックします。
トレーニングデータの割り当てエラー
トレーニングデータの割り当てに失敗すると、新しいカスタムモデルバージョンのデータセットの下にエラーメッセージが表示されます。 このエラーが存在する間は、影響を受けるバージョンをデプロイするモデルパッケージを作成できません。 エラーを解決してモデルパッケージをデプロイするには、トレーニングデータを再割り当てして新しいバージョンを作成するか、新しいバージョンを作成してからトレーニングデータを割り当てます。
予測リクエストでの列フィルターの無効化¶
本機能の提供について
設定可能な列フィルターは、デフォルトではオフになっています。 この機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
機能フラグ:カスタムモデルの予測で特徴量のフィルターを有効にする
プレビュー版の機能です。カスタムモデルの予測で、列フィルターを有効または無効にできます。 選択したフィルター設定は、カスタムモデルの テストやデプロイの際に同様に適用されます。 デフォルトでは、ターゲット列は予測リクエストから除外されます。また、トレーニングデータが割り当てられている場合、トレーニングデータセットに存在しない追加の列は、モデルに送信されるスコアリングリクエストから除外されます。 あるいは、予測データセットに欠損列がある場合、欠損している特徴量を通知するエラーメッセージが表示されます。
カスタムモデルを構築する場合、この列フィルターを無効にすることができます。 モデルワークショップでカスタムモデルを開いて、アセンブルタブをクリックし、設定セクションの列フィルターで、リクエストからターゲット列を除外をオフにします(または、トレーニングデータが割り当てられている場合は、ターゲット列とトレーニングデータにない余分な列を除外をオフにします)。
モデルの環境、ファイル、または設定に対するその他の変更と同様に、この設定を変更すると、新しい マイナーカスタムモデルバージョンが作成されます。
リクエストからターゲット列を除外またはトレーニングデータに含まれないターゲット列と追加列を除外が有効または無効の場合、次の動作が予期されます。
トレーニングデータの割り当て方法
モデルが 使用非推奨の「モデルごと」のトレーニングデータの割り当て方法を使用する場合、この設定は無効にできず、特徴量のフィルターは テスト中には 適用されません 。
に設定 | 動作 |
---|---|
有効 |
|
無効 |
|
DRUM予測
DRUMによる予測はフィルターされません。すべての列が各予測リクエストに含まれます。
カスタムモデルのリソース設定を行う¶
カスタム推論モデルを作成した後、モデルが消費するリソースを設定して、スムーズなデプロイを促進し、本番環境で発生する可能性のある環境エラーを最小限に抑えることができます。
リソースの割り当てとアクセスを設定するには:
-
アセンブルタブの設定セクションで、リソースの横にある()編集をクリックします。
-
リソース設定の更新ダイアログボックスで、次の設定を行います。
リソース設定へのアクセス
ユーザーはモデルに割り当てられる最大メモリーを決定できますが、追加のリソース設定を行えるのは 組織管理者だけです。
設定 説明 メモリー カスタム推論モデルに割り当てることのできるメモリーの最大量を決定します。 設定された最大値以上のメモリーが割り当てられたモデルはシステムによって排除されます。 この問題がテスト中に発生した場合、テストは失敗としてマークされます。 モデルのデプロイ時に発生した場合は、Kubernetesによってモデルが自動的に再起動されます。 レプリカ カスタムモデルの実行時にワークロードのバランスを取るために、並行して実行するレプリカの最大数を設定します。 レプリカの数を増やしても、カスタムモデルの速度に依存するため、パフォーマンスが向上しない場合があります。 ネットワークアクセス プレミアム機能。 カスタムモデルのエグレストラフィックを設定します。 - パブリック:デフォルト設定。 カスタムモデルは、パブリックネットワーク内の任意の完全修飾ドメイン名(FQDN)にアクセスして、サードパーティのサービスを利用できます。
- なし:カスタムモデルはパブリックネットワークから分離されているため、サードパーティのサービスにはアクセスできません。
DATAROBOT_ENDPOINT
およびDATAROBOT_API_TOKEN
環境変数を使用できます。 これらの環境変数は、 ドロップイン環境または DRUM上に構築された カスタム環境を使用するすべてのカスタムモデルで使用できます。バランスの悪いメモリー設定
DataRobotでは、必要な場合にのみリソース設定を行うことをお勧めします。 以下のメモリー設定では、Kubernetesメモリーの「制限」(メモリーの最大許容量)が設定されます。ただし、メモリーの「リクエスト」(メモリーの最小許容量)を設定することはできません。 このため、「制限」値をデフォルトの「リクエスト」値より大きく設定することができます。 メモリーの「リクエスト」と増加した「制限」によるメモリー許容量との不均衡が生じ、カスタムモデルがメモリー使用量の上限を超える場合があります。 その結果、カスタムモデルの頻繁な削除や再起動により、カスタムモデルが実行時に不安定になる場合があります。 メモリー設定を増やす必要がある場合は、組織レベルで「リクエスト」を増やすと、この問題を軽減できます。詳細については、DataRobotサポートまでお問い合わせください。
プレミアム機能:ネットワークアクセス
_新しく_作成したカスタムモデルはすべて、デフォルトでパブリックネットワークにアクセスできます。ただし、2023年10月より前に作成されたカスタムモデルの新しいバージョンを作成した場合、その新しいバージョンは、パブリックアクセスを有効にする(アクセスをパブリックに設定する)まで、パブリックネットワークから隔離された(アクセスがなしに設定された)ままです。 パブリックアクセスを有効にすると、後続の各バージョンは、前のバージョンのパブリックアクセス定義を継承します。
-
カスタムモデルのリソース設定を行ったら、保存をクリックします。
This creates a new minor version of the custom model with edited resource settings applied.
リソースバンドルを選択¶
本機能の提供について
カスタムモデルのリソースバンドルは、プレビュー機能として提供され、デフォルトではオフになっています。 この機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
機能フラグ: リソースのバンドルを有効にする、カスタムモデルでGPUを使用した推論を有効にする
モデルを構築して リソース設定を行う際に、メモリーではなくリソースバンドルを選択できます。 リソースバンドルを使用すると、さまざまなCPUおよびGPUハードウェアプラットフォームから選択して、カスタムモデルを構築およびテストできます。 カスタムモデルの設定セクションで、リソース設定を開き、リソースバンドルを選択します。 この例では、モデルはNVIDIA A10デバイスでテストおよびデプロイされるように構築されています。
編集をクリックしてリソース設定の更新ダイアログボックスを開き、リソースのバンドルフィールドで、構築環境として使用可能な CPUおよび NVIDIA GPUデバイスを確認します。
DataRobotは、次のNVIDIAリソースバンドルのいずれかにモデルをデプロイできます。
バンドル | GPU | VRAM | CPU | RAM | 説明 |
---|---|---|---|---|---|
GPU - S | 1 x NVIDIA T4 | 16GB | 4 | 16GB | 一般的なディープラーニングワークロード、またはGPUアクセラレーションが有効な機械学習ワークロードにお勧めします。 |
GPU - M | 1 x NVIDIA T4 | 16GB | 8 | 32GB | |
GPU - L | 1 x NVIDIA A10 | 24GB | 8 | 32GB | 小規模なLLMの実行にお勧めします。 |
NVIDIA GPUリソースバンドルに加えて、この機能は、NVIDIA GPU上で実行するように最適化されたカスタムモデル環境を導入します。 カスタムモデルを構築する場合、基本環境を定義します。 次の例では、モデルは、 [NVIDIA] Triton推論サーバーで実行されています。
DataRobotとNVIDIAの連携の詳細については、 NVIDIA GPUでNeMo Guardrailsを使用した生成AIを参照してください。