0 / 0
資料の 英語版 に戻る
カスタムfoundation modelのダウンロードとストレージの設定
最終更新: 2024年11月28日
カスタムfoundation modelのダウンロードとストレージの設定

watsonx.aiて推論用のカスタムfoundation modelをデプロイするには、モデルをクラウド オブジェクト ストレージにアップロードする必要があります。 デプロイメント・スペースまたは外部クラウド・ストレージに関連付けられているIBM Cloud Object Storage内のバケットを使用できます。

公開リポジトリからモデルをダウンロードする

基礎モデルをダウンロードするには、公開モデル・リポジトリを利用することができます。 公開モデルリポジトリからモデルをダウンロードする前に、アカウントを設定する必要があるかもしれません。

例えば、公開モデルリポジトリであるHugging Faceて、あなたのユースケースに合ったカスタム基礎モデルをダウンロードすることができます。 Hugging Faceからモデルをダウンロードするには、Hugging Faceアカウントを設定する必要があります。

モデルのダウンロード

これらの手順は、Hugging Faceを使用してカスタム・foundation modelをダウンロードする方法を示しています。 以下の手順に従って、Hugging Faceコマンドラインインターフェイスを使用してカスタムfoundation modelをダウンロードしてください:

  1. huggingface-cliパッケージをpipと一緒にインストールする:

    pip install -U "huggingface_hub[cli]"
    
  2. huggingface-cliが正しくセットアップされていることを確認する:

    huggingface-cli --help
    
  3. 必要な環境変数を設定する:

    export HF_TOKEN="<your Hugging Face token>"
    export MODEL_NAME="<name of the model>"
    export MODEL_DIR="<directory to download the model to>"
    
  4. ローカルディスクにモデルをダウンロードするディレクトリを設定します:

    mkdir ${MODEL_DIR}
    
  5. 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ファイルを含んでいない場合、以下の手順に従ってモデルを必要なフォーマットに変換してください。 そうでない場合は、クラウドオブジェクトストレージの設定とモデルの追加のセクションに進んでください。

  1. ローカルマシンにpodman Desktopをインストールします。

  2. TGIS画像を引き出す:

    export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74"
    podman pull ${TGIS_IMAGE}
    
  3. モデルを変換する:

    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 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 コマンドライン・インターフェースを使用してモデルをアップロードしてください:

  1. Amazon Web Services コマンドラインインターフェースをpipでインストールします:

    pip install awscli
    
  2. 必要な環境変数を設定する:

    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.
    
  3. IBM Cloud Object Storage バケットにモデルを追加するには、Amazon Web Services コマンドラインインターフェイスを使用します:

    aws --endpoint-url ${ENDPOINT} s3 cp ${MODEL_DIR} s3://${BUCKET_NAME}/${MODEL_FOLDER}/ --recursive --follow-symlinks
    

次のステップ

モデル アセットを作成する

親トピック カスタムfoundation modelの展開計画

生成 AI の検索と回答
これらの回答は、製品資料の内容に基づいて、 watsonx.ai のラージ言語モデルによって生成されます。 詳細