Hugging Faceにあるストレージのセットアップとモデルのアップロード
Hugging Faceにある基盤モデルをPVCストレージにアップロードするには、以下の手順に従ってください。
前提条件
この資料のコード・スニペットで使用される環境変数の一部は、インストール・ステージで設定されるグローバル変数です。 詳しくは、インストール環境変数の設定を参照してください。
Hugging Faceにあるストレージをセットアップし、モデルをアップロードするには、以下のようにします。
- Hugging Face Web サイトでモデルの名前を見つけます。
- 基本環境変数をセットアップします。
export MODEL_NAME="<Hugging Face model name>" export HF_USERNAME="<Your Hugging Face username>" export HF_TOKEN="<Your Hugging Face token>" export MODEL_PATH="/mnt/models" - モデルを複製します。
モデルのクローン作成後に、作成されたフォルダーの名前を確認します。git clone --no-checkout https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/${MODEL_NAME} - モデル・サイズを確認してください。 ご使用の環境に Git ラージ・File 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にあるモデルの場合、モデル名をクリックしてからファイルおよびバージョンタブを選択すると、すべてのファイル・サイズが表示されます。 - モデルの合計サイズを計算し、その結果に 100% のバッファーを追加します。 例えば、モデル・サイズが 14.5 GB の場合、作成する PVC のサイズは 29 GB です。 モデル・サイズを環境変数として設定します。
export MODEL_SIZE="<calculated model size>" - クラスター内にカスタム 基盤モデル 用の
PersistentVolumeClaims(PVC) ストレージを作成します。まず、新しい PVC の名前を環境変数として設定します。
export PVC_NAME="<The name of the new PVC>"次に、次のコードを実行します。
新規 PVC の作成、またはストレージ・ボリュームを使用した既存の 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 を作成した後、2 分待ってから、以下のコマンドを実行して PVC がバインドされていることを確認します。
予期される結果:oc get pvc ${PVC_NAME} -n ${PROJECT_CPD_INST_OPERANDS} -o jsonpath='{.status.phase}'Bound - Hugging Face・トークンを
base64にエンコードします。ENCODED_TOKEN=`echo -n ${HF_TOKEN} | base64` - クラスター内に シークレット を作成します。
まず、新しい シークレット の名前を設定します。
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 - Docker・イメージの
nameとtagを環境変数として設定します。export IMAGE_NAME="http://registry.redhat.io/rhoai/odh-vllm-cuda-rhel9@sha256:751e2359439161babb9ad8e93e16251888a8c07aed895ffa55e4dfaf2a45f89d" - 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: ${IMAGE_NAME}:${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 - ジョブが作成されたことを確認します。
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 モデルが時系列モデルの場合は、追加のステップが必要になることがあります。 時系列モデルの tsfm_config.json ファイルの生成 を参照してください。
チャット API を使用するモデルの場合、モデルに付属の標準チャット・テンプレートをオーバーライドできます。 これを可能にするには、まず、モデル作成者によって準備された代替テンプレートをダウンロードします。 次に、
config.jsonファイルが配置されているのと同じ場所 (ルート・フォルダー) にアップロードします。
時系列モデルの tsfm_config.json ファイルの生成
tsfm_config.json ファイルが含まれている必要があります。 Hugging Face でホストされる時系列モデル (model_type: tinytimemixer) には、このファイルが含まれていない可能性があります。 モデルがダウンロードされてデプロイされるときにファイルが存在しない場合、予測は失敗します。 このファイルがモデル・ディレクトリーにない場合は、以下の手順を実行します。- 注:
ファイルを生成するには、ご使用の環境に Python バージョン 3.9 以上がインストールされている必要があります。
パッケージのインストールが必要なため、エアー・ギャップ環境で操作している場合は、インターネットにアクセスできるマシンでスクリプトを実行してから、生成されたファイルをエアー・ギャップ環境に転送する必要があります。
- 以下のコードを実行して、2 つの必須パッケージをローカル・マシンにインストールします。
pip3 install granite-tsfm==0.2.27 pip3 install ibm-cos-sdk - 欠落しているファイルを作成する Python スクリプトを作成して実行します。
このコードは、ファイルをfrom tsfm_public import TinyTimeMixerForPrediction from tsfm_public.toolkit.service_util import save_deployment_package # Instantiate the model target_columns = ["total load actual"] zeroshot_model = TinyTimeMixerForPrediction.from_pretrained( "ibm-granite/granite-timeseries-ttm-r2", # Name of the model on Hugging Face num_input_channels=len(target_columns), # tsp.num_input_channels ) save_deployment_package("ttm", zeroshot_model)ttmディレクトリーに保存します。 - 生成されたファイルを、モデルが配置されている PVC ロケーションにコピーします。注: このスクリプトは、以下の 3 つのファイルを生成します。
config.json、model.safetensors、およびtsfm_config.json。 これらのファイルの一部を既に生成している場合は、古いファイルを上書きできます。