watsonx.aiて推論用のカスタムfoundation modelをデプロイするには、モデルをクラウド オブジェクト ストレージにアップロードする必要があります。 デプロイメント・スペースまたは外部クラウド・ストレージに関連付けられているIBM Cloud Object Storage内のバケットを使用できます。
公開リポジトリからモデルをダウンロードする
基礎モデルをダウンロードするには、公開モデル・リポジトリを利用することができます。 公開モデルリポジトリからモデルをダウンロードする前に、アカウントを設定する必要があるかもしれません。
例えば、公開モデルリポジトリであるHugging Faceて、あなたのユースケースに合ったカスタム基礎モデルをダウンロードすることができます。 Hugging Faceからモデルをダウンロードするには、Hugging Faceアカウントを設定する必要があります。
モデルのダウンロード
これらの手順は、Hugging Faceを使用してカスタム・foundation modelをダウンロードする方法を示しています。 以下の手順に従って、Hugging Faceコマンドラインインターフェイスを使用してカスタムfoundation modelをダウンロードしてください:
huggingface-cli
パッケージをpip
と一緒にインストールする:pip install -U "huggingface_hub[cli]"
huggingface-cliが正しくセットアップされていることを確認する:
huggingface-cli --help
必要な環境変数を設定する:
export HF_TOKEN="<your Hugging Face token>" export MODEL_NAME="<name of the model>" export MODEL_DIR="<directory to download the model to>"
ローカルディスクにモデルをダウンロードするディレクトリを設定します:
mkdir ${MODEL_DIR}
Hugging Faceコマンドラインインターフェースにログインし、モデルをダウンロードする:
huggingface-cli login --token ${HF_TOKEN} huggingface-cli download ${MODEL_NAME} --local-dir ${MODEL_DIR} --cache-dir ${MODEL_DIR}
モデルを必要な形式に変換する
モデルをオブジェクト・ストレージに追加する前に、モデルがText Generation Inference(TGI)標準と互換性があり、サポートされているモデル・アーキテクチャとモデル・タイプで構築されていることを確認する必要があります。 詳細については、カスタムfoundation modelの展開計画を参照してください。
モデルが InstructLab, safetensors
フォーマットへの変換はできないかもしれません:
- Linux 環境で微調整されたモデルは、変換が必要です。
- マックで微調整したモデルは変換できない。
- 微調整され、
.gguf
フォーマットで保存されたモデルは(どの環境でも)変換できません。
InstructLab,で微調整したモデルを変換するには、このリポジトリにあるコードを使ってください。
他のすべてのモデルについて、あなたのモデルがsafetensors
フォーマットでなく、tokenizer.json
ファイルを含んでいない場合、以下の手順に従ってモデルを必要なフォーマットに変換してください。 そうでない場合は、クラウドオブジェクトストレージの設定とモデルの追加のセクションに進んでください。
ローカルマシンに
podman
Desktopをインストールします。TGIS画像を引き出す:
export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74" podman pull ${TGIS_IMAGE}
モデルを変換する:
container_id=$(podman run -itd --privileged -u 0 -v ${MODEL_DIR}:/tmp ${TGIS_IMAGE} tail -f /dev/null) podman exec -it ${container_id} bash -c 'export MODEL_PATH=/tmp ; text-generation-server convert-to-safetensors ${MODEL_PATH} ; text-generation-server convert-to-fast-tokenizer ${MODEL_PATH}'
モデルをクラウドオブジェクトストレージにアップロードする
IBM Cloud Object Storageのバケットや、Amazon Simple Storage ServiceAmazon S3)などの他のストレージ・バケットにモデルをアップロードすることができます。 IBMが提供するクラウド・オブジェクト・ストレージの一部を紹介しよう:
IBM Aspera Transfer SDK を使用して、IBM Cloud Object Storage にモデルをアップロードします
前提条件:
- IBM Aspera Transfer SDK をダウンロードしてください。 このリンクをクリックしてください。
- これらの環境変数を設定する:
- IBM Aspera Transfer SDKへのパスを
path-to-aspera
とする path-to-model-folder
としてモデルが格納されているフォルダへのパスbucket-name
としてモデルを転送するバケット名- クラウドオブジェクトストレージのAPIキーを
api-key
とします - クラウドオブジェクトストレージサービスのインスタンスIDを
cos-service-instance-id
とします - クラウドオブジェクトストレージサービスのエンドポイントを
cos-service-endpoint
とします
- IBM Aspera Transfer SDKへのパスを
IBM Aspera Transfer SDK を使用して、IBM Cloud Object Storage にモデルをアップロードするには、このスクリプトを使用します:
import grpc
import sys
import time, subprocess
import json
import os.path
import os.environ
import transfer_pb2 as transfer_manager
import transfer_pb2_grpc as transfer_manager_grpc
path_to_aspera = os.environ['path-to-aspera']
sys.path.append(f'{path_to_aspera}/connectors/python')
def start_aspera_daemon():
config_path = f'/{path_to_aspera}/config/asperatransferd.json'
daemon_path = f'/{path_to_aspera}/bin/asperatransferd'
# Start the daemon
process = subprocess.Popen([daemon_path, '--config', config_path])
print(f"Started Aspera Transfer SDK daemon with PID {process.pid}")
time.sleep(5) # Increased wait time for the daemon to start properly
return process
def run():
try:
# create a connection to the transfer manager daemon
client = transfer_manager_grpc.TransferServiceStub(grpc.insecure_channel('localhost:55002'))
# create transfer spec
transfer_spec = {
"session_initiation":{
"icos":{
"bucket": os.environ['bucket-name'],
"api_key": os.environ['cos-api-key'],
"ibm_service_instance_id": os.environ['cos-service-instance-id'],
"ibm_service_endpoint": os.environ['cos-service-endpoint'] # example: https://s3.us-south.cloud-object-storage.appdomain.cloud
}
},
"direction": "send",
"title": "COS Upload",
"assets": {
"destination_root": "/model",
"paths": [
{
"source": os.environ['path-to-model-folder']
}
]
}
}
transfer_spec = json.dumps(transfer_spec)
# create a transfer request
transfer_request = transfer_manager.TransferRequest(
transferType=transfer_manager.FILE_REGULAR,
config=transfer_manager.TransferConfig(),
transferSpec=transfer_spec
)
# send start transfer request to transfer manager daemon
try:
transfer_response = client.StartTransfer(transfer_request)
transfer_id = transfer_response.transferId
print(f"Transfer started with id {transfer_id}")
except grpc.RpcError as e:
print(f"Error starting transfer: {e.code()}: {e.details()}")
return
# monitor transfer status
try:
# Monitor transfer status
while True:
response = client.MonitorTransfers(
transfer_manager.RegistrationRequest(
filters=[transfer_manager.RegistrationFilter(
transferId=[transfer_id]
)]))
for transfer_info in response:
print(f"Transfer info: {transfer_info}")
# Check transfer status in response
status = transfer_info.status
if status == transfer_manager.FAILED or status == transfer_manager.COMPLETED:
print(f"Transfer finished with status {status}")
return
# Wait before polling again
time.sleep(5)
except grpc.RpcError as e:
print(f"Error monitoring transfer: {e.code()}: {e.details()}")
except Exception as e:
print(f"Unexpected error: {str(e)}", file=sys.stderr)
if __name__ == '__main__':
# Start the Aspera Transfer SDK daemon
daemon_process = start_aspera_daemon()
# Run the file transfer
run()
# Optionally, stop the Aspera daemon after transfer
daemon_process.terminate()
print("Aspera Transfer SDK daemon stopped")
サードパーティが提供するツールを使用して、IBM Cloud Object Storage にモデルをアップロードする
サードパーティのソフトウェアを使用して、IBM Cloud Object Storage にモデルをアップロードできます。
以下の例の手順に従って、IBM Cloud Object Storage に Amazon Web Services コマンドライン・インターフェースを使用してモデルをアップロードしてください:
Amazon Web Services コマンドラインインターフェースを
pip
でインストールします:pip install awscli
必要な環境変数を設定する:
export AWS_ACCESS_KEY_ID="<your access key>" export AWS_SECRET_ACCESS_KEY="<your secret access key>" export ENDPOINT="<s3 endpoint URL>" export BUCKET_NAME="<name of the bucket to upload the model>" MODEL_FOLDER=${MODEL_NAME//\//-} # The name of the created folder is based on model name. export MODEL_FOLDER=${MODEL_FOLDER//./-} # Just in case, we're removing slashes and dots from it.
IBM Cloud Object Storage バケットにモデルを追加するには、Amazon Web Services コマンドラインインターフェイスを使用します:
aws --endpoint-url ${ENDPOINT} s3 cp ${MODEL_DIR} s3://${BUCKET_NAME}/${MODEL_FOLDER}/ --recursive --follow-symlinks