ストレージのセットアップと、ご使用の環境にあるモデルのアップロード
以下のステップに従って、独自の環境にある基盤モデルを PVC ストレージにアップロードします。
前提条件
この資料のコード・スニペットで使用される環境変数の一部は、インストール・ステージで設定されるグローバル変数です。 詳しくは、インストール環境変数の設定を参照してください。
ストレージをセットアップし、ご使用の環境にあるモデルをアップロードするには、以下のようにします。
- 基本環境変数をセットアップします。
export MODEL_PATH="/mnt/models" - モデル・サイズを確認してください。 ご使用の環境に Git ラージ・File Storage (
git lfs) がインストールされている場合は、モデルが含まれているフォルダーに移動し、モデルのサイズを確認します。
出力例:cd ${MODEL_PATH} 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>" - PVC の ストレージ・クラスを確認します。
- カスタム 基盤モデル 用の
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 - カスタム・スタンドアロン・ジョブを作成して、モデル・コンテンツをソース・ロケーションから PVC パスにコピーします。
以下に、カスタム・モデルを PVC にコピーする例を示します。 この例では、モデルが IBM COS バケット内にあることを前提としています。
まず、COS シークレットを作成します。
次に、必要な環境変数をセットアップします。oc create secret generic aws-credentials \ --from-literal=AWS_ACCESS_KEY_ID=<your access key id> \ --from-literal=AWS_SECRET_ACCESS_KEY=<your secret access key>
次に、IBM COS バケットから PVC にモデルをコピーするジョブを作成して実行します。export ENDPOINT="<Endpoint for the s3 bucket>" export BUCKET_NAME="<Name of the bucket where the model is located>" export MODEL_PATH_IN_BUCKET="<Model path in bucket>" export COPY_JOB_NAME="<Name of the job that copies the model from COS>"cat <<EOF |oc apply -f - apiVersion: batch/v1 kind: Job metadata: name: ${COPY_JOB_NAME} spec: template: spec: containers: - name: aws-cli image: amazon/aws-cli:latest command: ["sh","-c"] args: - aws --endpoint-url ${ENDPOINT} s3 cp s3://${BUCKET_NAME}/${MODEL_PATH_IN_BUCKET} /model --recursive env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: aws-credentials key: AWS_ACCESS_KEY_ID - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: aws-credentials key: AWS_SECRET_ACCESS_KEY - name: BUCKET_NAME value: ${BUCKET_NAME} - name: ENDPOINT value: ${ENDPOINT} - name: MODEL_PATH value: ${MODEL_PATH_IN_BUCKET} volumeMounts: - name: pvc-mount mountPath: /model restartPolicy: Never volumes: - name: pvc-mount persistentVolumeClaim: claimName: ${PVC_NAME} EOF - ジョブが作成されたことを確認します。
予期される出力:oc get job ${COPY_JOB_NAME} -n ${PROJECT_CPD_INST_OPERANDS}NAME COMPLETIONS DURATION AGE <job name> 1/1 xx xx - ジョブ状況を確認します。
予期される出力:oc get job ${COPY_JOB_NAME} -n ${PROJECT_CPD_INST_OPERANDS} -o jsonpath='{.status.conditions[?(@.type=="Complete")].status}'True - モデルを
safetensorおよびfast-tokenizerフォーマットに変換するジョブを作成して実行します。 モデルが既にこれらの基準を満たしていることが確実な場合は、このステップをスキップできます。 最も速い方法は、モデル・リポジトリーを開いて、tokenizer.jsonファイルと.safetensorsファイルが含まれているかどうかを確認することです。まず、ダイジェストの
nameとtagを環境変数として設定します。 ダイジェストは、Docker・イメージの固有 ID です。 これは、イメージの内容に基づいて計算されます。export IMAGE_NAME="http://registry.redhat.io/rhoai/odh-vllm-cuda-rhel9@sha256:751e2359439161babb9ad8e93e16251888a8c07aed895ffa55e4dfaf2a45f89d" export IMAGE_TAG="rhoai-2.8-58cac74"次に、ジョブ名の環境変数をセットアップします。
export CONV_JOB_NAME="<Name of the job>"次に、コンバーター・ジョブを作成して実行します。
cat <<EOF |oc apply -f - apiVersion: batch/v1 kind: Job metadata: name: ${CONV_JOB_NAME} namespace: ${PROJECT_CPD_INST_OPERANDS} spec: template: spec: containers: - name: models-safetensor image: ${IMAGE_NAME}:${IMAGE_TAG} env: - name: MODEL_PATH value: /model command: ["/bin/sh", "-c"] args: - | text-generation-server convert-to-safetensors ${MODEL_PATH} text-generation-server convert-to-fast-tokenizer ${MODEL_PATH} volumeMounts: - mountPath: /model name: byom-model restartPolicy: Never volumes: - name: byom-model persistentVolumeClaim: claimName: ${PVC_NAME} EOFジョブが作成されたことを確認します。
oc get job ${CONV_JOB_NAME} -n ${PROJECT_CPD_INST_OPERANDS}予期される出力:
NAME COMPLETIONS DURATION AGE <job name> 1/1 xx xx次に、ジョブ状況を確認します。
予期される出力:oc get job ${CONV_JOB_NAME} -n ${PROJECT_CPD_INST_OPERANDS} -o jsonpath='{.status.conditions[?(@.type=="Complete")].status}'True
注:
チャット API を使用するモデルの場合、モデルに付属の標準チャット・テンプレートをオーバーライドできます。 これを可能にするには、まず、モデル作成者によって準備された代替テンプレートをダウンロードします。 次に、config.json ファイルが配置されているのと同じ場所 (ルート・フォルダー) にアップロードします。