저장소 설정 및 모델 업로드 위치 Hugging Face

다음 단계를 따라 파운데이션 모델을 PVC Hugging Face 스토리지에 업로드하십시오.

전제조건

이 문서의 코드 스니펫에서 사용되는 일부 환경 변수는 설치 단계에서 설정되는 전역 변수입니다. 자세한 내용은 설치 환경 변수 설정을 참조하십시오.

저장소를 설정하고 다음 위치에 있는 모델을 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="/mnt/models"
  3. 모델을 복제하십시오.
    git clone --no-checkout https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/${MODEL_NAME}
    모델을 복제한 후 생성된 폴더의 이름을 확인하십시오.
  4. 모델 크기를 확인하십시오. 환경에 Large File Storage (git lfs)가 Git 설치되어 있다면, 모델이 포함된 폴더로 이동한 후 모델 크기를 확인하십시오:
    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.5 29GB인 경우 생성하는 PVC의 크기는 29GB입니다. 모델 크기를 환경 변수로 설정하십시오:
    export MODEL_SIZE="<calculated model size>"
  6. 클러스터에 사용자 정의 파운데이션 모델용 (PVC) PersistentVolumeClaims 스토리지를 생성하십시오.

    먼저, 새 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. Docker 이미지의 tagname 를 환경 변수로 설정하십시오.
    export IMAGE_NAME="http://registry.redhat.io/rhoai/odh-vllm-cuda-rhel9@sha256:751e2359439161babb9ad8e93e16251888a8c07aed895ffa55e4dfaf2a45f89d"
  11. 모델을 에서 Hugging Face 다운로드하고, 해당 모델을 및 fast-tokenizer safetensor 형식으로 변환하는 작업을 생성하고 실행합니다.

    먼저 작업 이름에 대한 환경 변수를 설정하십시오:

    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
  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

  13. 모델이 시계열 모델인 경우 추가 단계가 필요할 수 있습니다. 시계열 모델용 파일 tsfm_config.json 생성을 참조하십시오.

    채팅 API를 사용하는 모델의 경우, 모델과 함께 제공되는 표준 채팅 템플릿을 재정의할 수 있습니다. 이를 가능하게 하려면, 먼저 모델 제작자가 준비한 대체 템플릿을 다운로드하십시오. 그런 다음 해당 config.json 파일이 위치한 위치(루트 폴더)와 동일한 위치에 업로드하십시오.

시계열 모델용 파일 tsfm_config.json 생성

시계열 모델용 모델 디렉터리에는 반드시 파일이 tsfm_config.json 포함되어야 합니다. (모델 유형 Hugging Face : tinytimemixer)에 호스팅되는 시계열 모델은 이 파일을 포함하지 않을 수 있습니다. 모델을 다운로드하고 배포할 때 파일이 존재하지 않으면 예측이 실패합니다. 모델 디렉터리에서 이 파일을 찾을 수 없는 경우 다음 단계를 수행하십시오:
  1. 참고:

    해당 파일을 생성하려면 환경에 버전 3.9 이상이 설치되어 Python 있어야 합니다.

    패키지 설치가 필요하므로, 에어갭 환경에서 작업 중인 경우 인터넷에 접근 가능한 컴퓨터에서 스크립트를 실행한 후 생성된 파일을 에어갭 환경으로 전송해야 합니다.

  2. 이 코드를 실행하여 로컬 머신에 필요한 두 패키지를 설치하십시오:
    
    pip3 install granite-tsfm==0.2.27
    pip3 install ibm-cos-sdk
  3. 누락된 파일을 생성하는 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 디렉터리에 저장합니다.
  4. 생성된 파일을 모델이 위치한 PVC 위치로 복사하십시오.
    참고: 이 스크립트는 세 개의 파일을 생성합니다: config.json, model.safetensors, 그리고 tsfm_config.json. 이 파일들 중 일부를 이전에 생성한 적이 있다면, 기존 파일을 덮어쓸 수 있습니다.