6.3. LM-Eval 场景


以下过程概述了对 ML-Eval 设置非常有用的示例场景。

6.3.1. 配置 LM-Eval 环境

如果 LMEvalJob 需要通过访问令牌访问 HuggingFace 上的模型,您可以将 HF_TOKEN 设置为 lm-eval 容器之一。

先决条件

  • 已登陆到 Red Hat OpenShift AI。
  • 您的 OpenShift 集群管理员已安装了 OpenShift AI,并为部署模型的数据科学项目启用了 TrustyAI 服务。

流程

  1. 要为 huggingface 模型启动评估作业,请应用以下 YAML 文件:

    apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: LMEvalJob
    metadata:
      name: evaljob-sample
    spec:
      model: hf
      modelArgs:
      - name: pretrained
        value: huggingfacespace/model
      taskList:
        taskNames:
        - unfair_tos/
      logSamples: true
      pod:
        container:
          env:
          - name: HF_TOKEN
            value: "My HuggingFace token"
    Copy to Clipboard Toggle word wrap
  2. (可选)您还可以创建一个 secret 来存储令牌,然后使用以下引用语法从 secretKeyRef 对象中引用密钥:

    env:
      - name: HF_TOKEN
        valueFrom:
          secretKeyRef:
            name: my-secret
            key: hf-token
    Copy to Clipboard Toggle word wrap

6.3.2. 使用自定义 Unitxt 卡

您可以使用自定义 Unitxt 卡运行评估。要做到这一点,请在 LMEvalJob YAML 中以 JSON 格式包括自定义 Unitxt 卡。

先决条件

  • 已登陆到 Red Hat OpenShift AI。
  • 您的 OpenShift 集群管理员已安装了 OpenShift AI,并为部署模型的数据科学项目启用了 TrustyAI 服务。

流程

  1. 以 JSON 格式传递自定义 Unitxt 卡:

    apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: LMEvalJob
    metadata:
      name: evaljob-sample
    spec:
      model: hf
      modelArgs:
      - name: pretrained
        value: google/flan-t5-base
      taskList:
        taskRecipes:
        - template: "templates.classification.multi_class.relation.default"
          card:
            custom: |
              {
                "__type__": "task_card",
                "loader": {
                  "__type__": "load_hf",
                  "path": "glue",
                  "name": "wnli"
                },
                "preprocess_steps": [
                  {
                    "__type__": "split_random_mix",
                    "mix": {
                      "train": "train[95%]",
                      "validation": "train[5%]",
                      "test": "validation"
                    }
                  },
                  {
                    "__type__": "rename",
                    "field": "sentence1",
                    "to_field": "text_a"
                  },
                  {
                    "__type__": "rename",
                    "field": "sentence2",
                    "to_field": "text_b"
                  },
                  {
                    "__type__": "map_instance_values",
                    "mappers": {
                      "label": {
                        "0": "entailment",
                        "1": "not entailment"
                      }
                    }
                  },
                  {
                    "__type__": "set",
                    "fields": {
                      "classes": [
                        "entailment",
                        "not entailment"
                      ]
                    }
                  },
                  {
                    "__type__": "set",
                    "fields": {
                      "type_of_relation": "entailment"
                    }
                  },
                  {
                    "__type__": "set",
                    "fields": {
                      "text_a_type": "premise"
                    }
                  },
                  {
                    "__type__": "set",
                    "fields": {
                      "text_b_type": "hypothesis"
                    }
                  }
                ],
                "task": "tasks.classification.multi_class.relation",
                "templates": "templates.classification.multi_class.relation.all"
              }
      logSamples: true
    Copy to Clipboard Toggle word wrap
  2. 在自定义卡中,指定 Hugging Face dataset 加载程序:

    "loader": {
                  "__type__": "load_hf",
                  "path": "glue",
                  "name": "wnli"
                },
    Copy to Clipboard Toggle word wrap
  3. (可选)您可以使用其他 Unitxt 加载程序(可在 Unitxt 网站中找到),其中包含 卷和 volumeMounts 参数从持久性卷挂载数据集。例如,如果使用 LoadCSV Unitxt 命令,请将文件挂载到容器,并使 dataset 可供评估过程访问。

6.3.3. 使用 PVC 作为存储

要将 PVC 用作 LMEvalJob 结果的存储,您可以使用受管 PVC 或现有的 PVC。管理的 PVC 由 TrustyAI operator 管理。现有 PVC 由最终用户创建,然后再创建 LMEvalJob

注意

如果在输出中同时引用受管和现有的 PVC,则 TrustyAI operator 默认为受管 PVC。

先决条件

  • 已登陆到 Red Hat OpenShift AI。
  • 您的 OpenShift 集群管理员已安装了 OpenShift AI,并为部署模型的数据科学项目启用了 TrustyAI 服务。

6.3.3.1. 管理的 PVC

要创建受管 PVC,请指定其大小。受管 PVC 名为 &lt ;job-name>-pvc,在作业完成后可用。删除 LMEvalJob 时,受管 PVC 也会被删除。

流程

  • 输入以下代码:

    apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: LMEvalJob
    metadata:
      name: evaljob-sample
    spec:
      # other fields omitted ...
      outputs:
        pvcManaged:
          size: 5Gi
    Copy to Clipboard Toggle word wrap

代码备注

  • 输出 是指定自定义存储位置的部分
  • pvcManaged 将创建一个 Operator 管理的 PVC
  • 大小 (与标准 PVC 语法兼容)是唯一支持的值

6.3.3.2. 现有 PVC

要使用现有的 PVC,将其名称作为引用传递。创建 LMEvalJob 时 PVC 必须存在。PVC 不是由 TrustyAI 操作器管理,因此在删除 LMEvalJob 后可用。

流程

  1. 创建 PVC。例如:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: "my-pvc"
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    Copy to Clipboard Toggle word wrap
  2. 引用 LMEvalJob 中的新 PVC。

    apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: LMEvalJob
    metadata:
      name: evaljob-sample
    spec:
      # other fields omitted ...
      outputs:
        pvcName: "my-pvc"
    Copy to Clipboard Toggle word wrap

6.3.4. 使用 InferenceService

要在命名空间中已部署并运行的 InferenceService 上运行评估作业,请定义您的 LMEvalJob CR,然后将此 CR 应用到与模型相同的命名空间中。

先决条件

  • 已登陆到 Red Hat OpenShift AI。
  • 您的 OpenShift 集群管理员已安装了 OpenShift AI,并为部署模型的数据科学项目启用了 TrustyAI 服务。
  • 您有一个包含带有 vLLM 模型的 InferenceService 的命名空间。本例假定 vLLM 模型已在集群中部署。

流程

  1. 定义 LMEvalJob CR:

      apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: LMEvalJob
    metadata:
      name: evaljob
    spec:
      model: local-completions
      taskList:
        taskNames:
          - mmlu
      logSamples: true
      batchSize: 1
      modelArgs:
        - name: model
          value: granite
        - name: base_url
          value: $ROUTE_TO_MODEL/v1/completions
        - name: num_concurrent
          value:  "1"
        - name: max_retries
          value:  "3"
        - name: tokenized_requests
          value: "False"
        - name: tokenizer
          value: ibm-granite/granite-7b-instruct
     env:
       - name: OPENAI_TOKEN
         valueFrom:
              secretKeyRef:
                name: <secret-name>
                key: token
    Copy to Clipboard Toggle word wrap
  2. 将此 CR 应用到与您的模型相同的命名空间中。

验证

在名为 evaljob 的模型命名空间中启动 pod。在 pod 终端中,您可以通过 tail -f output/stderr.log 来查看输出。

代码备注

  • BASE_ URL 应设置为模型的路由/服务 URL。确保在 URL 中包含 /v1/completions 端点。
  • env.valueFrom.secretKeyRef.name 应该指向包含可向模型进行身份验证的令牌的机密。secretRef.name 应该是命名空间中的 secret 名称,而 secretRef.key 应该指向 secret 中的令牌密钥。
  • secretKeyRef.name 可以等于以下的输出:

    oc get secrets -o custom-columns=SECRET:.metadata.name --no-headers | grep user-one-token
    Copy to Clipboard Toggle word wrap
  • secretKeyRef.key 设置为 token
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat