注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

新たな言語モデルのサポートを追加する

ノーコード言語モデルに加えて、Foundry は Hugging FacespaCy などの人気のある言語モデルフレームワークとの統合をユーザーに可能にします。Conda や Pip を通じて利用可能な任意の Python フレームワークを Foundry で活用することができます。ただし、多くのフレームワークが事前学習済みのモデル、コーパス、または他の設定をインターネットからダウンロードするため、それらを Foundry 内で完全に機能するようにするためには追加の手順がよく必要となります。これは、デフォルトでユーザーが書いた Python コードへの公開インターネットへのアクセスを拒否する Foundry のセキュリティアーキテクチャの結果です。必要な追加の手順は、言語モデルフレームワークの詳細によります。

Hugging Face

ノーコード言語モデルとして利用できない Hugging Face 言語モデルのサポートを追加するには、以下の2つのオプションがあります:

  1. モデルファイルを raw データセットとしてインポートする
  2. Hugging Face のドメインを許可リストに追加する

モデルファイルをデータセットとしてインポートする

Hugging Face モデルハブから任意のモデルをデータセットとしてインポートできます。そのデータセットはコードリポジトリやコードワークスペースで使用できます。

まず、Hugging Face からモデルファイルをダウンロードします。次に、モデルをスキーマレスデータセットとしてアップロードして、ファイルを Foundry に取り込みます。これらのファイルは、フロントエンドのアップロード(新規 > データセット > インポート > すべてのファイルを選択)または、モデルファイルがプライベートネットワーク内の共有ドライブに保存されている場合にはデータ接続同期を通じてアップロードできます。

インポートデータセットには、Hugging Face のモデル詳細のファイルとバージョンタブからのすべてのファイルが含まれているべきです。ただし、必要なのは1つのバイナリモデルファイルだけです(例えば、pytorch_model.bintf_model.h5)。ほとんどの場合、バイナリモデルファイルとして PyTorch モデルを使用することをお勧めします。

モデルファイルがデータセットに保存されていると、ユーザーのトランスフォームの入力としてそのデータセットを使用できます。モデルのサイズによっては、モデルをメモリにロードするために DRIVER_MEMORY_MEDIUM のような Spark プロファイルを指定する必要があるかもしれません。以下のコードは foundry-huggingface-adapters からのユーティリティを使用しています:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from palantir_models.transforms import ModelOutput from transforms.api import transform, Input from transformers import AutoTokenizer, AutoModel from huggingface_adapters.utils import copy_model_to_driver # トランスフォーム関数を定義 @transform( model_output=ModelOutput("/path/to/output/model_asset"), # モデルの出力パスを指定 hugging_face_raw=Input("/path/to/input/dataset"), # 入力データセットのパスを指定 ) def compute(model_output, hugging_face_raw): temp_dir = copy_model_to_driver(hugging_face_raw.filesystem()) # モデルをドライバーにコピー tokenizer = AutoTokenizer.from_pretrained(temp_dir) # 事前学習済みのトークナイザーをロード model = AutoModel.from_pretrained(temp_dir) # 事前学習済みのモデルをロード # モデルアダプタでモデルをラップし、モデルとして保存 # model_output.publish(...)

使用するユースケースに応じて、EmbeddingAdapter のような言語モデルアダプタ のうちの1つを使用できます:

Copied!
1 2 3 4 5 6 7 8 9 10 # 他のインポート from huggingface_adapters.embedding_adapter import EmbeddingAdapter # ... # モデルの出力を公開 model_output.publish( # 埋め込みアダプタを使用して、トークナイザとモデルを渡す model_adapter=EmbeddingAdapter(tokenizer, model), # バージョン変更タイプをMINORに設定 change_type=ModelVersionChangeType.MINOR )

Hugging Face ドメインの許可リストへの追加

別の方法として、Foundry エンロールメントのネットワーク送信ポリシーに関連する Hugging Face ドメインを許可リストに追加することができます。許可リストに追加するべきドメインは https://huggingface.cohttps://cdn-lfs.huggingface.co です。ネットワーク送信設定の詳細は Foundry 管理ドキュメンテーション を参照してください。

さらに、Hugging Face からモデルを読み込むコードリポジトリは、 transforms-external-systems ライブラリが追加され、新しく作成された送信ポリシーを使用するように 設定される 必要があります。設定が完了したら、Python トランスフォームでオープンソースの言語モデルを読み込むことができます。

エラー PermissionError: [Errno 13] Permission denied: '/.cache' が表示された場合は、以下の例に示すように、モデルのロード時にキャッシュディレクトリを指定する必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from palantir_models.transforms import ModelOutput from transforms.api import transform, Input from transforms.external.systems import use_external_systems, EgressPolicy, ExportControl from transformers import AutoTokenizer, AutoModel import tempfile # 外部システムを使用するためのデコレータを利用します。 # ここでは、エクスポート制御とエグレスポリシーを指定しています。 @use_external_systems( export_control=ExportControl(markings=['<marking ID>']), # エクスポート制御の設定 egress=EgressPolicy(<policy RID>), # エグレスポリシーの設定 ) # モデルの出力先と入力データのパスを指定するデコレータを利用します。 @transform( model_output=ModelOutput('/path/to/output/model_asset'), # モデル出力のパス text_input=Input('/path/to/input/dataset'), # 入力データのパス ) def compute(export_control, egress, model_output, text_input): CACHE_DIR = tempfile.mkdtemp() # 一時的なディレクトリを作成 tokenizer = AutoTokenizer.from_pretrained("bert-base-cased", cache_dir=CACHE_DIR) # 事前学習済みのトークナイザをロード model = AutoModel.from_pretrained("bert-base-cased", cache_dir=CACHE_DIR) # 事前学習済みのモデルをロード # モデルのインスタンスをモデルアダプターでラップし、それをPalantirプラットフォームに保存します # model_output.publish(...)

Foundryでの使用方法

データセットまたはHugging Faceのドメインを通じて言語モデルにアクセスしたら、モデルアダプターを使用して言語モデルをPalantirモデルとしてラップし、それをコードリポジトリのモデルトレーニングドキュメンテーションで定義されているように統合することができます。