ストレージの設定と、そこに保存されているモデルのアップロード Hugging Face

以下の手順に従って、 Hugging Face にある基盤モデル PVCストレージにアップロードしてください。

前提条件

この文書のコード・スニペットで使用されている環境変数のいくつかは、インストール段階で設定されるグローバル変数です。 詳細については、インストール環境変数の設定を参照してください。

Hugging Face に保存されているモデルをアップロードするには、以下の手順に従います

  1. モデル名は、 Hugging Face ウェブサイト でご確認ください。
  2. 基本的な環境変数を設定する:
    export MODEL_NAME="<Hugging Face model name>"
    export HF_USERNAME="<Your Hugging Face username>"
    export HF_TOKEN="<Your Hugging Face token>"
    export MODEL_PATH="<Path to the directory where you want to download your model>"
    • デプロイメント watsonx-cfm-caikit-1.1 ソフトウェア仕様を使用する vLLM ランタイムを使用する場合、 MODEL_PATH パラメータを次のように設定する必要があります。 /mnt/models
    • デプロイメント watsonx-cfm-caikit-1.0 ソフトウェア仕様を使用する TGIS ランタイムを使用する場合、 MODEL_PATH パラメータを次のように設定する必要があります。 /models
  3. モデルのクローンを作る。
    git clone --no-checkout https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/${MODEL_NAME}
    モデルをクローンした後、作成されたフォルダの名前を確認してください。
  4. モデルサイズを確認する。 お使いの環境にGitLargeFile Storage(git lfs) がインストールされている場合は、モデルを含むフォルダに移動し、モデルのサイズを確認してください:
    git lfs ls-files -s
    出力:
    root@wmlubntu1:~/falcon-7b# git lfs ls-files -s
    1c4b989693 - pytorch_model-00001-of-00002.bin (10 GB)
    11822397cd - pytorch_model-00002-of-00002.bin (4.5 GB)
    あなたの環境に'git lfsがインストールされていない場合、モデルビルダーまたはモデルが元々置かれていたリポジトリからこの情報を取得する必要があります。 Hugging Face に配置されているモデルの場合、モデル名をクリックし、 ファイルとバージョン タブを選択すると、すべてのファイルサイズが表示されます。
  5. モデルの総サイズを計算し、その結果に100%のバッファを加える。 例えば、モデルサイズが14.5GBの場合、作成するPVCのサイズは29GBとなります。 モデルサイズを環境変数として設定する:
    export MODEL_SIZE="<calculated model size>"
  6. クラスタにカスタム基盤モデルの「PersistentVolumeClaims(PVC)ストレージを作成します。

    まず、新しいPVCの名前を環境変数として設定する:

    export PVC_NAME="<The name of the new PVC>"

    次に、このコードを実行する:

    cat <<EOF |oc apply -f -
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ${PVC_NAME}
      namespace: ${PROJECT_CPD_INST_OPERANDS}
    spec:
      storageClassName: ${STG_CLASS_FILE}
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: ${MODEL_SIZE}Gi
    EOF
    ストレージボリュームで新しいPVCを作成する方法、または既存のPVCを使用する方法について詳しくは、「ストレージボリュームの管理」 を参照してください。
  7. PVCの作成後、2分間待ってからこのコマンドを実行し、PVCがバインドされていることを確認する:
    oc get pvc ${PVC_NAME} -n ${PROJECT_CPD_INST_OPERANDS} -o jsonpath='{.status.phase}'
    期待される結果: 'Bound
  8. Hugging Face トークンを base64 にエンコードします
    ENCODED_TOKEN=`echo -n ${HF_TOKEN} | base64`
  9. クラスターにシークレットを作成する:

    まず、新しい秘密の名前を設定します:

    export SECRET_NAME="<The name of the new secret>"

    次に、このコードを実行する:

    cat <<EOF |oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: ${SECRET_NAME}
      namespace: ${PROJECT_CPD_INST_OPERANDS}
    type: Opaque
    data:
      TOKEN: ${ENCODED_TOKEN}
    EOF
  10. TGISダイジェストの'nameと'tagを環境変数として設定する。 ダイジェストはDockerイメージの一意な識別子です。 画像の内容に基づいて計算される:
    export TGIS_IMAGE_NAME="quay.io/modh/text-generation-inference"
    export TGIS_IMAGE_TAG="rhoai-2.8-58cac74"
  11. Hugging Face からモデルをダウンロードし、モデルを safetensor および fast-tokenizer フォーマットに変換するジョブを作成して実行します。

    まず、ジョブ名の環境変数を設定する:

    export DOWN_AND_CONV_JOB_NAME="<Name of the job>"

    次に、このコードを実行する:

    cat <<EOF |oc apply -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: ${DOWN_AND_CONV_JOB_NAME}
      namespace: ${PROJECT_CPD_INST_OPERANDS}
    spec:
      template:
        spec:
          containers:
          - name: models-convertor
            image: ${TGIS_IMAGE_NAME}:${TGIS_IMAGE_TAG}
            env:
            - name: MODEL_PATH
              value: ${MODEL_PATH}
            - name: MODEL_NAME
              value: ${MODEL_NAME}
            - name: TOKEN
              valueFrom:
                secretKeyRef:
                  name: ${SECRET_NAME}
                  key: TOKEN
            command: ["/bin/sh", "-c"]
            args:
            - |
              huggingface-cli login --token ${TOKEN}
              huggingface-cli download ${MODEL_NAME} --local-dir ${MODEL_PATH} --cache-dir ${MODEL_PATH}
              text-generation-server convert-to-safetensors ${MODEL_PATH}
              text-generation-server convert-to-fast-tokenizer ${MODEL_PATH}
            volumeMounts:
            - mountPath: ${MODEL_PATH}
              name: byom-model
          restartPolicy: Never
          volumes:
          - name: byom-model
            persistentVolumeClaim:
              claimName: ${PVC_NAME}
    EOF
  12. ジョブが作成されたことを確認する:
    oc get job ${DOWN_AND_CONV_JOB_NAME} -n ${PROJECT_CPD_INST_OPERANDS}

    予期される出力:

    NAME                   COMPLETIONS   DURATION   AGE
    <job name>   1/1           xx         xx

    最後に、ジョブのステータスをチェックする:

    oc get job ${DOWN_AND_CONV_JOB_NAME} -n ${PROJECT_CPD_INST_OPERANDS} -o jsonpath='{.status.conditions[?(@.type=="Complete")].status}'

    予期される出力: True