监控数据科学模型


Red Hat OpenShift AI Self-Managed 2.16

监控 OpenShift AI 模型公平

摘要

在 OpenShift AI 中监控机器学习模型,以确保它们透明、公平且可靠。

第 1 章 模型监控概述

为确保机器学习模型是透明、公平且可靠的,数据科学家可以在 OpenShift AI 中使用 TrustyAI 来监控其数据科学模型。

数据科学家可以在 OpenShift AI 中监控其数据科学模型,以了解以下指标:

bias
检查数据和模型预测中的未公平模式或双向模式,以确保您的模型的决策没有意外处理。
数据偏移
通过将最新的实际数据与原始培训数据进行比较,检测随时间分布的变化。比较数据标识了可能会影响模型性能的转换或偏差,确保该模型保持准确且可靠。

第 2 章 配置 TrustyAI

要为数据科学家在 OpenShift AI 中配置带有 TrustyAI 的模型监控,集群管理员需要执行以下任务:

  • 为模型服务平台配置监控
  • 在 Red Hat OpenShift AI Operator 中启用 TrustyAI 组件
  • 如果要使用数据库而不是带有 TrustyAI 的存储的 PVC,将 TrustyAI 配置为使用数据库。
  • 在包含数据科学家要监控的模型的每个数据科学项目上安装 TrustyAI 服务

2.1. 为您的模型服务平台配置监控

OpenShift AI 提供以下模型服务平台:

单模式服务平台
为了部署大型模型,如大型语言模型(LLMs),OpenShift AI 包括一个单一模型服务平台,它基于 KServe 组件。每个模型都从其自己的模型服务器进行部署。当您需要部署、监控、扩展和维护需要增加资源的大型模型时,请使用单一模型服务平台。
多型号服务平台
为了部署小型和中型模型,OpenShift AI 包含一个基于 ModelMesh 组件的多模式服务平台。在多模式服务平台上,您可以在相同的模型服务器上部署多种模型。部署的每个模型共享服务器资源。这种方法对于具有有限计算资源或 Pod 的 OpenShift AI 集群非常有用。

为单个(KServe)或多模型(ModelMesh)服务平台配置监控的过程相同。

先决条件

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 在名为 uwm-cm-conf.yaml 的 YAML 文件中定义 ConfigMap 对象,其内容如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: user-workload-monitoring-config
      namespace: openshift-user-workload-monitoring
    data:
      config.yaml: |
        prometheus:
          logLevel: debug
          retention: 15d

    user-workload-monitoring-config 对象配置监控用户定义的项目的组件。观察到保留时间被设置为推荐的值 15 天。

  3. 应用配置以创建 user-workload-monitoring-config 对象。

    $ oc apply -f uwm-cm-conf.yaml
  4. 在名为 uwm-cm-enable.yaml 的 YAML 文件中定义另一个 ConfigMap 对象,其内容如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true

    cluster-monitoring-config 对象为用户定义的项目启用监控。

  5. 应用配置以创建 cluster-monitoring-config 对象。

    $ oc apply -f uwm-cm-enable.yaml

2.2. 启用 TrustyAI 组件

要允许您的数据科学家使用带有 TrustyAI 的模型监控,您必须在 OpenShift AI 中启用 TrustyAI 组件。

先决条件

  • 具有集群管理员特权。
  • 您可以访问数据科学集群。
  • 已安装 Red Hat OpenShift AI。

流程

  1. 在 OpenShift 控制台中,点 OperatorsInstalled Operators
  2. 搜索 Red Hat OpenShift AI Operator,然后点 Operator 名称以打开 Operator 详情页面。
  3. Data Science Cluster 选项卡。
  4. 点默认实例名称(如 default-dsc)打开实例详情页面。
  5. YAML 选项卡显示实例规格。
  6. spec:components 部分中,将 trustyai 组件的 managementState 字段设置为 Managed

     trustyai:
        managementState: Managed
  7. 点击 Save

验证

检查 trustyai-service-operator pod 的状态:

  1. 在 OpenShift 控制台中,从 Project 列表中选择 redhat-ods-applications
  2. WorkloadsDeployments
  3. 搜索 trustyai-service-operator-contoller-manager 部署。检查状态:

    1. 单击部署名称以打开部署详情页面。
    2. Pods 选项卡。
    3. 查看 pod 状态。

      trustyai-service-operator-controller-manager-manager- &lt;pod-id > pod 的状态为 Running 时,pod 已就绪。

2.3. 使用数据库配置 TrustyAI

如果您在 OpenShift 集群(如 MySQL 或 MariaDB)中有一个关系数据库,您可以将 TrustyAI 配置为使用数据库而不是持久性卷声明(PVC)。使用数据库而不是 PVC 来提高 TrustyAI 中的可扩展性、性能和数据管理。在部署前,为 TrustyAI 提供数据库配置 secret。您可以创建 secret,或指定项目中现有 Kubernetes secret 的名称。

先决条件

  • 具有集群管理员特权。
  • 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI
  • 您已启用了 TrustyAI 组件,如 启用 TrustyAI 组件 中所述。
  • 数据科学家已创建了数据科学项目,如创建 数据科学项目 中所述,其中包含数据科学家想要监控的模型。
  • 如果您要使用外部 MySQL 数据库配置 TrustyAI 服务,您的数据库必须已存在于集群中,且至少使用 MySQL 版本 5.x。但是,红帽建议您使用 MySQL 版本 8.x。
  • 如果您要使用 MariaDB 数据库配置 TrustyAI 服务,您的数据库必须已位于集群中,并使用 MariaDB 版本 10.3 或更高版本。但是,红帽建议您至少使用 MariaDB 版本 10.5。
注意

传输安全层(TLS)协议不适用于 MariaDB operator 0.29 或更高版本。

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 可选:如果要在 TrustyAI 和数据库之间使用 TLS 连接,请创建一个 TrustyAI 服务数据库 TLS secret,使用与数据库相同的证书。

    1. 创建包含 TLS secret 的 YAML 文件并添加以下代码:

      apiVersion: v1
      kind: Secret
      metadata:
        name: <service_name>-db-tls
      type: kubernetes.io/tls
      data:
        tls.crt: |
          <TLS CERTIFICATE>
      
        tls.key: |
          <TLS KEY>
    2. 使用文件名 < service_name>-db-tls.yaml 保存文件。例如,如果您的服务名称是 trustyai-service,请将文件保存为 trustyai-service-db-tls.yaml
    3. 应用 data Science 项目中的 YAML 文件,其中包含数据科学家要监控的型号:

      $ oc apply -f <service_name>-db-tls.yaml -n <project_name>
  3. 创建具有数据库凭证的 secret (或指定现有 secret)。

    1. 创建包含您的 secret 的 YAML 文件并添加以下代码:

      apiVersion: v1
      kind: Secret
      metadata:
        name: db-credentials
      type: Opaque
      stringData:
        databaseKind: <mariadb> 
      1
      
        databaseUsername: <TrustyAI_username> 
      2
      
        databasePassword: <TrustyAI_password> 
      3
      
        databaseService: mariadb-service 
      4
      
        databasePort: 3306 
      5
      
        databaseGeneration: update 
      6
      
        databaseName: trustyai_service 
      7
      1
      目前唯一支持的 databaseKind 值为 mariadb
      2
      与数据库交互时,您希望 TrustyAI 使用的用户名。
      3
      TrustyAI 在连接到数据库时必须使用的密码。
      4
      当连接到数据库时,TrustyAI 必须使用的 Kubernetes (K8s)服务(默认的 mariadb)。
      5
      TrustyAI 在连接到数据库时必须使用的端口(默认为 3306)。
      6
      TrustyAI 使用的数据库架构生成策略。它是 quarkus.hibernate-orm.database.generation 参数的设置,它决定了 TrustyAI 在初始连接上如何与数据库进行交互。设置为 none创建drop-and-createdropupdatevalidate
      7
      用户名和密码验证的数据库服务中的单个数据库名称,以及 TrustyAI 应该读取和写入数据库服务器的特定数据库名称。
    2. 使用文件名 db-credentials.yaml 保存文件。安装或更改 TrustyAI 服务时,稍后您将需要此名称。
    3. 应用 data Science 项目中的 YAML 文件,其中包含数据科学家要监控的型号:

      $ oc apply -f db-credentials.yaml -n <project_name>
  4. 如果您要在项目首次安装 TrustyAI,请继续为项目 安装 TrustyAI 服务

    如果您已在项目上安装了 TrustyAI,您可以使用 PVC 将现有 TrustyAI 服务迁移到使用数据库。

    1. 创建一个 YAML 文件来更新 TrustyAI 服务自定义资源(CR)并添加以下代码:

      apiVersion: trustyai.opendatahub.io/v1alpha1
      kind: TrustyAIService
      metadata:
        annotations:
          trustyai.opendatahub.io/db-migration: "true" 
      1
      
        name: trustyai-service 
      2
      
      spec:
        storage:
          format: "DATABASE" 
      3
      
          folder: "/inputs" 
      4
      
            size: "1Gi" 
      5
      
          databaseConfigurations: <database_secret_credentials> 
      6
      
        data:
          filename: "data.csv" 
      7
      
        metrics:
          schedule: "5s" 
      8
      1
      设置为 true,以提示从 PVC 迁移到数据库存储。
      2
      TrustyAI 服务实例的名称。
      3
      数据的存储格式。将此字段设置为 DATABASE
      4
      您存储数据的 PVC 中的位置。这必须与现有 CR 中指定的值匹配。
      5
      要请求的数据大小。
      6
      带有您在上一步中创建的数据库凭证的 secret 名称。例如,db-credentials
      7
      现有存储数据文件的后缀。这必须与现有 CR 中指定的值匹配。
      8
      计算指标的间隔。默认值为 5s。持续时间使用 ISO-8601 格式指定。例如,5s 代表 5 秒,5m 代表 5 分钟,5h 代表 5 小时。
    2. 保存该文件。例如,trustyai_crd.yaml
    3. 将新的 TrustyAI 服务 CR 应用到包含数据科学家要监控的模型的数据科学项目:

      $ oc apply -f trustyai_crd.yaml -n <project_name>

2.4. 为项目安装 TrustyAI 服务

在数据科学项目上安装 TrustyAI 服务,以便为该项目内部署的所有模型提供其功能的访问权限。每个数据科学项目或命名空间都需要一个 TrustyAI 服务实例,其中包含数据科学家要监控的型号。

注意

在项目中仅安装 TrustyAI 服务的一个实例。同一项目中的多个实例可能会导致意外行为。

将 TrustyAI 安装到部署非OVMS 模型的命名空间中,可能会导致 TrustyAI 服务出现错误。

2.4.1. 使用 CLI 安装 TrustyAI 服务

您可以使用 OpenShift 命令行界面(CLI)安装 TrustyAI 服务的实例。

先决条件

流程

  1. 打开一个新的终端窗口。
  2. 按照以下步骤,以集群管理员身份登录到 OpenShift 集群:

    1. 在 OpenShift Web 控制台中,单击您的用户名并选择 Copy login command
    2. 登录后,单击 Display token
    3. 使用此令牌命令复制登录,并将它粘贴到 OpenShift 命令行界面(CLI)中

      $ oc login --token=<token> --server=<openshift_cluster_url>
  3. 导航到包含数据科学家要监控的模型的数据科学项目。

    oc project <project_name>

    例如:

    oc project my-project
  4. 创建 TrustyAIService 自定义资源(CR)文件,如 trustyai_crd.yaml

    TrustyAI 使用数据库的 CR 文件示例

    apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: TrustyAIService
    metadata:
      name: trustyai-service 
    1
    
    spec:
      storage:
    	  format: "DATABASE" 
    2
    
    	  size: "1Gi" 
    3
    
    	  databaseConfigurations: <database_secret_credentials> 
    4
    
      metrics:
      	schedule: "5s" 
    5

    1
    TrustyAI 服务实例的名称。
    2
    数据的存储格式,可以是 DATABASEPVC (持久性卷声明)。红帽建议您使用数据库设置来提高 TrustyAI 中的可扩展性、性能和数据管理。
    3
    要请求的数据大小。
    4
    使用您在 配置 TrustyAI 使用数据库 时创建的数据库 凭证的 secret 名称。例如,db-credentials
    5
    计算指标的间隔。默认值为 5s。持续时间使用 ISO-8601 格式指定。例如,5s 代表 5 秒,5m 代表 5 分钟,5h 代表 5 小时。

    使用 PVC 的 TrustyAI 的 CR 文件示例

    apiVersion: trustyai.opendatahub.io/v1alpha1
    kind: TrustyAIService
    metadata:
      name: trustyai-service 
    1
    
    spec:
      storage:
    	  format: "PVC" 
    2
    
    	  folder: "/inputs" 
    3
    
    	  size: "1Gi" 
    4
    
      data:
    	  filename: "data.csv" 
    5
    
    	  format: "CSV" 
    6
    
      metrics:
      	schedule: "5s" 
    7
    
      	batchSize: 5000 
    8

    1
    TrustyAI 服务实例的名称。
    2
    数据的存储格式,可以是 DATABASEPVC (持久性卷声明)。
    3
    要存储数据的 PVC 中的位置。
    4
    要请求的 PVC 的大小。
    5
    存储的数据文件的后缀。
    6
    数据格式。目前,只支持以逗号分隔的值(CSV)格式。
    7
    计算指标的间隔。默认值为 5s。持续时间使用 ISO-8601 格式指定。例如,5s 代表 5 秒,5m 代表 5 分钟,5h 代表 5 小时。
    8
    (可选)观察用于指标计算的历史窗口大小。默认值为 5000,这意味着指标使用 5,000 个 latest inferences 计算。
  5. 将 TrustyAI 服务的 CR 添加到您的项目中:

    oc apply -f trustyai_crd.yaml

    这个命令返回类似如下的输出:

    trusty-service created

验证

验证您是否安装了 TrustyAI 服务:

oc get pods | grep trustyai

您应该看到类似如下的响应:

trustyai-service-5d45b5884f-96h5z             1/1     Running

第 3 章 为您的项目设置 TrustyAI

要为数据科学项目设置带有 TrustyAI 的模型监控,数据科学家需要执行以下任务:

  • 验证 TrustyAI 服务
  • 将培训数据发送到 TrustyAI for bias 或数据偏移监控
  • 标记您的数据字段(可选)

设置后,数据科学家可以为已部署的模型创建和查看 bias 和数据偏移指标。

3.1. 验证 TrustyAI 服务

要访问 TrustyAI 服务端点,您必须提供 OAuth 代理(oauth-proxy)身份验证。您必须从具有足够特权的服务帐户获取用户令牌或令牌,然后在使用 curl 命令时将令牌传递给 TrustyAI 服务。

先决条件

  • 已安装 OpenShift 命令行界面(oc),如 安装 OpenShift CLI 中所述。
  • 您的 OpenShift 集群管理员作为用户添加到 OpenShift 集群,并为包含部署模型的数据科学项目安装了 TrustyAI 服务。

流程

  1. 打开一个新的终端窗口。
  2. 按照以下步骤登录到 OpenShift 集群:

    1. 在 OpenShift Web 控制台右上角,单击您的用户名,然后选择 Copy login command
    2. 登录后,单击 Display token
    3. 使用此令牌命令复制登录,并将它粘贴到 OpenShift 命令行界面(CLI)中

      $ oc login --token=<token> --server=<openshift_cluster_url>
  3. 输入以下命令在 OpenShift 中设置用户令牌变量:

    export TOKEN=$(oc whoami -t)

验证

  • 输入以下命令检查用户令牌变量:

    echo $TOKEN

后续步骤

在运行 curl 命令时,使用 Authorization 标头将令牌传递给 TrustyAI 服务。例如:

curl -H "Authorization: Bearer $TOKEN" $TRUSTY_ROUTE

3.2. 将培训数据发送到 TrustyAI

要使用 TrustyAI 进行bias 监控或数据偏移检测,您必须将模型的培训数据发送到 TrustyAI。

先决条件

  • 您的 OpenShift 集群管理员作为用户添加到 OpenShift 集群,并为包含部署模型的数据科学项目安装了 TrustyAI 服务。
  • 您验证了 TrustyAI 服务,如 验证 TrustyAI 服务 中所述。
  • 您部署的模型使用 TrustyAI 注册。

    验证 TrustyAI 服务是否已注册了部署的模型,如下所示:

    1. 在 OpenShift Web 控制台中,导航到 WorkloadsPods
    2. 从项目列表中选择包含部署模型的项目。
    3. 为您的服务平台选择 pod (如 modelmesh-serving-ovms-1.x-xxxxx)。
    4. Environment 选项卡中,验证是否设置了 MM_PAYLOAD_PROCESSORS 环境变量。

流程

  1. TRUSTY_ROUTE 变量设置为 TrustyAI 服务 pod 的外部路由。

    TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  2. 获取已部署模型的 inference 端点,如 访问已部署模型的 inference 端点 中所述。
  3. 将数据发送到此端点。如需更多信息,请参阅 KServe v2 Inference 协议文档

验证

按照以下步骤查看集群指标,并验证 TrustyAI 正在接收数据。

  1. 登录 OpenShift Web 控制台。
  2. 切换到 Developer 视角。
  3. 在左侧菜单中,点 Observe
  4. Metrics 页面中,单击 Select query 列表,然后选择 Custom query
  5. Expression 字段中,输入 trustyai_model_observations_total 并按 Enter。应该列出您的模型并报告观察到的推测。
  6. 可选:从图形上面的列表中选择一个时间范围。例如,选择 5m

3.3. 标记数据字段

将模型培训数据发送到 TrustyAI 后,您可能需要对输入和输出应用一组名称映射,以便字段名称具有意义且更易于使用。

先决条件

  • 您的 OpenShift 集群管理员作为用户添加到 OpenShift 集群,并为包含部署模型的数据科学项目安装了 TrustyAI 服务。
  • 将培训数据发送到 TrustyAI,如 向 TrustyAI 发送培训数据 中所述。

流程

  1. 打开一个新的终端窗口。
  2. 按照以下步骤登录到 OpenShift 集群:

    1. 在 OpenShift Web 控制台右上角,单击您的用户名,然后选择 Copy login command
    2. 登录后,单击 Display token
    3. 使用此令牌命令复制登录,并将它粘贴到 OpenShift 命令行界面(CLI)中

      $ oc login --token=<token> --server=<openshift_cluster_url>
  3. 在 OpenShift CLI 中,获取到 TrustyAI 服务的路由:

    TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  4. 要检查 TrustyAI 的模型元数据,请查询 /info 端点:

    curl -H "Authorization: Bearer $TOKEN" $TRUSTY_ROUTE/info | jq ".[0].data"

    这会输出一个 JSON 文件,其中包含每个模型的以下信息:

    • 输入字段和输出字段的名称、数据类型和位置。
    • 观察到的字段值。
    • 观察到的 input-output 对总数。
  5. 使用 POST /info/names 将名称映射应用到字段,如下例所示。

    model-nameorigin-namePrediction 值改为模型中使用的值。将 New name 值更改为要使用的标签。

    curl -sk -H "Authorization: Bearer $TOKEN" -X POST --location $TRUSTY_ROUTE/info/names \
      -H "Content-Type: application/json"   \
      -d "{
        \"modelId\": \"model-name\",
        \"inputMapping\":
          {
            \"original-name-0\": \"New name 0\",
            \"original-name-1\": \"New name 1\",
            \"original-name-2\": \"New name 2\",
            \"original-name-3\": \"New name 3\",
          },
        \"outputMapping\": {
          \"predict-0\": \"Prediction 0\"
        }
      }"

    有关另一个示例,请参阅 https://github.com/trustyai-explainability/odh-trustyai-demos/blob/main/2-BiasMonitoring/kserve-demo/scripts/apply_name_mapping.sh

验证

此时会显示 "Feature and output name mapping successfully applied" 信息。

第 4 章 监控模型 bias

作为数据科学家,您可能需要监控机器学习模型的bias。这意味着监控对于这种算法的监控,这些算法可能会降低模型生成的结果或决策。最重要的是,这种类型的监控可帮助您确保模型不会针对特定的受保护的组或功能进行计费。

Red Hat OpenShift AI 提供了一组指标,可帮助您监控 bias 的模型。您可以使用 OpenShift AI 接口来选择可用的指标,然后配置特定于模型的详细信息,如受保护的属性、特权和非特权组、您要监控的结果,以及 bias 的阈值。然后,您会看到一个计算的值的图表,以了解指定数量的模型推测。

有关特定 bias 指标的更多信息,请参阅支持的 bias 指标

4.1. 创建一个 bias 指标

要监控部署的模型 bias,您必须首先创建 bias 指标。当您创建 bias 指标时,您可以指定与模型相关的详细信息,如受保护的属性、特权和非特权组、模型结果和您要监控的值,以及 bias 可接受的阈值。

有关特定 bias 指标的详情,请参考 支持的 bias 指标

有关 TrustyAI 指标的完整列表,请参阅 TrustyAI 服务 API

您可以使用 OpenShift AI 仪表板或使用 OpenShift 命令行界面(CLI)为模型创建一个 bias 指标。

4.1.1. 使用仪表板创建一个 bias 指标

您可以使用 OpenShift AI 仪表板为模型创建一个 bias 指标。

先决条件

  • 熟悉 OpenShift AI 支持的 bias 指标 以及如何解释它们。
  • 您熟悉特定的数据集模式,并了解输入和输出的名称和含义。
  • 您的 OpenShift 集群管理员作为用户添加到 OpenShift 集群,并为包含部署模型的数据科学项目安装了 TrustyAI 服务。
  • 为您的数据科学项目设置 TrustyAI,如 为项目设置 TrustyAI 中所述。

流程

  1. 可选: 要设置 TRUSTY_ROUTE 变量,请按照以下步骤操作。

    1. 在终端窗口中,登录部署了 OpenShift AI 的 OpenShift 集群。

      oc login
    2. TRUSTY_ROUTE 变量设置为 TrustyAI 服务 pod 的外部路由。

      TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  2. 在 OpenShift AI 仪表板的左侧菜单中,单击 Model Serving
  3. Deployed models 页面中,从下拉列表中选择您的项目。
  4. 点您要为其配置 bias 指标的模型名称。
  5. 在模型的指标页面上,单击 Model bias 选项卡。
  6. 单击 Configure
  7. Configure bias metrics 对话框中,完成以下步骤以配置 bias 指标:

    1. Metric name 字段中,为您的 bias 指标输入唯一名称。请注意,以后您无法更改此指标的名称。
    2. Metric type 列表中,选择 OpenShift AI 中提供的一个指标类型。
    3. Protected 属性 字段中,在您要监控的模型中键入要监控的属性名称。

      提示

      您可以使用 curl 命令查询元数据端点,并查看输入属性名称和值。例如: curl -H "Authorization: Bearer $TOKEN" $TRUSTY_ROUTE/info | jq ".[0].data.inputSchema"

    4. Privileged value 字段中,为您指定的 protected 属性输入特权组的名称。
    5. Unprivileged value 字段中,为您指定的 protected 属性输入非特权组的名称。
    6. Output 字段中,键入您要监控的模型结果的名称。

      提示

      您可以使用 curl 命令查询元数据端点,并查看输出属性名称和值。例如: curl -H "Authorization: Bearer $TOKEN" $TRUSTY_ROUTE/info | jq ".[0].data.outputSchema"

    7. Output value 字段中,键入您要监控 bias 的结果值。
    8. Violation threshold 字段中,输入您选择的指标类型的 bias 阈值。此阈值定义指定指标从指标公平值到多少,然后模型被视为计费。
    9. Metric batch size 字段中,键入 OpenShift AI 包括每次计算指标时的模型 inferences 数。
  8. 确保您输入的值正确。

    注意

    您不能在创建模型后编辑模型 bias 指标配置。相反,您可以复制指标,然后编辑(配置)它;但是,原始指标的历史记录不会应用到副本。

  9. 单击 Configure

验证

  • Bias 指标配置 页面显示您为模型配置的 bias 指标。

后续步骤

要查看指标,请在 Bias 指标配置 页面中,单击右上角的 View metrics

4.1.2. 使用 CLI 创建 bias 指标

您可以使用 OpenShift 命令行界面(CLI)为模型创建 bias 指标。

先决条件

  • 熟悉 OpenShift AI 支持的 bias 指标 以及如何解释它们。
  • 您熟悉特定的数据集模式,并了解输入和输出的名称和含义。
  • 您的 OpenShift 集群管理员作为用户添加到 OpenShift 集群,并为包含部署模型的数据科学项目安装了 TrustyAI 服务。
  • 为您的数据科学项目设置 TrustyAI,如 为项目设置 TrustyAI 中所述。

流程

  1. 在终端窗口中,登录部署了 OpenShift AI 的 OpenShift 集群。

    oc login
  2. TRUSTY_ROUTE 变量设置为 TrustyAI 服务 pod 的外部路由。

    TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  3. (可选)获取 TrustyAI 服务端点和有效负载的完整列表。

    curl -H "Authorization: Bearer $TOKEN" --location $TRUSTY_ROUTE/q/openapi
  4. 使用 POST /metrics/group/fairness/spd/request 来调度重复的 bias 监控指标,语法和有效负载结构:

    语法

    curl -sk -H "Authorization: Bearer $TOKEN" -X POST --location $TRUSTY_ROUTE/metrics/spd/request \
     --header 'Content-Type: application/json' \
     --data <payload>

    有效负载结构

    modelId
    要查询的模型的名称。
    protectedAttribute
    可区分您要检查的组的特性名称。
    privilegedAttribute
    怀疑更倾向于(混合)课程。
    unprivilegedAttribute
    怀疑无疑(假假)类。
    outcomeName
    提供您要检查输出的输出名称。
    favorableOutcome
    描述可替代或所需模型预测的 result Name 输出值。
    batchSize
    计算中包含的前差异数量。

例如:

curl -sk -H "Authorization: Bearer $TOKEN" -X POST --location $TRUSTY_ROUTE/metrics/group/fairness/spd/ \
     --header 'Content-Type: application/json' \
     --data "{
                 \"modelId\": \"demo-loan-nn-onnx-alpha\",
                 \"protectedAttribute\": \"Is Male-Identifying?\",
                 \"privilegedAttribute\": 1.0,
                 \"unprivilegedAttribute\": 0.0,
                 \"outcomeName\": \"Will Default?\",
                 \"favorableOutcome\": 0,
                 \"batchSize\": 5000
             }"

验证

bias 指标请求应返回类似如下的输出:

{
   "timestamp":"2023-10-24T12:06:04.586+00:00",
   "type":"metric",
   "value":-0.0029676404469311524,
   "namedValues":null,
   "specificDefinition":"The SPD of -0.002968 indicates that the likelihood of Group:Is Male-Identifying?=1.0 receiving Outcome:Will Default?=0 was -0.296764 percentage points lower than that of Group:Is Male-Identifying?=0.0.",
   "name":"SPD",
   "id":"d2707d5b-cae9-41aa-bcd3-d950176cbbaf",
   "thresholds":{"lowerBound":-0.1,"upperBound":0.1,"outsideBounds":false}
}

specificDefinition 字段可帮助您了解这些指标值的真实解释。在本例中,模型在 Male-Identifying? 字段中公平,正结果的速率仅与大约 -0.3% 有所不同。

4.1.3. 复制一个 bias 指标

如果要编辑现有指标,您可以在 OpenShift AI 接口中复制(复制),然后编辑副本中的值。但请注意,原始指标的历史记录不会应用到副本。

先决条件

  • 熟悉 OpenShift AI 支持的 bias 指标 以及如何解释它们。
  • 您熟悉特定的数据集模式,并了解输入和输出的名称和含义。
  • 存在一个您要复制的现有 bias 指标。

流程

  1. 在 OpenShift AI 仪表板的左侧菜单中,单击 Model Serving
  2. Deployed model 页面中,单击带有您要重复的 bias 指标的模型 名称。
  3. 在模型的指标页面上,单击 Model bias 选项卡。
  4. 单击 Configure
  5. Bias 指标配置 页面中,点您要复制的指标旁的操作菜单(rules),然后点 Duplicate
  6. Configure bias 指标 对话框中,按照以下步骤操作:

    1. Metric name 字段中,为您的 bias 指标输入唯一名称。请注意,以后您无法更改此指标的名称。
    2. 根据需要更改字段的值。有关这些字段的描述,请参阅使用 仪表板创建双向指标
  7. 确保您输入的值正确,然后单击 Configure

验证

  • Bias 指标配置 页面显示您为模型配置的 bias 指标。

后续步骤

要查看指标,请在 Bias 指标配置 页面中,单击右上角的 View metrics

4.2. 删除一个 bias 指标

您可以使用 OpenShift AI 仪表板或使用 OpenShift 命令行界面(CLI)删除模型的 bias 指标。

4.2.1. 使用仪表板删除 bias 指标

您可以使用 OpenShift AI 仪表板删除模型的 bias 指标。

先决条件

  • 您已登陆到 Red Hat OpenShift AI。
  • 您要删除的现有 bias 指标。

流程

  1. 在 OpenShift AI 仪表板的左侧菜单中,单击 Model Serving
  2. Deployed model 页面中,单击带有您要删除的 bias 指标的模型 名称。
  3. 在模型的指标页面上,单击 Model bias 选项卡。
  4. 单击 Configure
  5. 点您要删除的指标旁的操作菜单(WWN),然后点 Delete
  6. Delete bias 指标 对话框中,键入指标名称以确认删除。

    注意

    您无法撤销删除 bias 指标。

  7. 单击 Delete bias 指标

验证

  • Bias 指标配置页面 不显示您删除的 bias 指标。

4.2.2. 使用 CLI 删除 bias 指标

您可以使用 OpenShift 命令行界面(CLI)删除模型的 bias 指标。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您有一个用于身份验证的用户令牌,如 验证 TrustyAI 服务 中所述。
  • 您要删除的现有 bias 指标。

流程

  1. 打开一个新的终端窗口。
  2. 按照以下步骤登录到 OpenShift 集群:

    1. 在 OpenShift Web 控制台右上角,单击您的用户名,然后选择 Copy login command
    2. 登录后,单击 Display token
    3. 使用此令牌命令复制登录,并将它粘贴到 OpenShift 命令行界面(CLI)中

      $ oc login --token=<token> --server=<openshift_cluster_url>
  3. 在 OpenShift CLI 中,获取到 TrustyAI 服务的路由:

    TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  4. 可选: 要列出指标的所有当前活跃请求,请使用 GET /metrics/{{metric}}/requests。例如,要列出所有当前调度的 SPD 指标,请输入:

    curl -H "Authorization: Bearer $TOKEN" -X GET --location "$TRUSTY_ROUTE/metrics/spd/requests"

    或者,要列出所有当前调度的指标请求,请使用 GET /metrics/all/requests

    curl -H "Authorization: Bearer $TOKEN" -X GET --location "$TRUSTY_ROUTE/metrics/all/requests"
  5. 要删除指标,请将 HTTP DELETE 请求发送到 /metrics/$METRIC/request 端点,以停止定期计算,包括要在有效负载中取消的定期任务 ID。例如:

    curl -H "Authorization: Bearer $TOKEN" -X DELETE --location "$TRUSTY_ROUTE/metrics/spd/request" \
        -H "Content-Type: application/json" \
        -d "{
              \"requestId\": \"3281c891-e2a5-4eb3-b05d-7f3831acbb56\"
            }"

验证

使用 GET /metrics/{{metric}}/requests 列出指标的所有当前活动请求,并验证您删除的指标没有显示。例如:

curl -H "Authorization: Bearer $TOKEN" -X GET --location "$TRUSTY_ROUTE/metrics/spd/requests"

4.3. 查看模型的 bias 指标

创建 bias 监控指标后,您可以使用 OpenShift AI 仪表板来查看和更新您配置的指标。

前提条件

流程

  1. 在 OpenShift AI 仪表板中,点 Model Serving
  2. Deployed model 页面中,点您要查看 bias 指标的模型 名称。
  3. 在模型的指标页面上,单击 Model bias 选项卡。
  4. 要更新页面中显示的指标,请按照以下步骤操作:

    1. Metrics to display 部分中,使用 Select a metric 列表选择要显示在页面上的指标。

      注意

      每次选择要在页面中显示的指标时,会出现一个额外的 Select a metric 列表。这可让您在页面中显示多个指标。

    2. 从右上角的 Time range 列表选择一个值。
    3. 从右上角的 Refresh interval 列表中,选择一个值。

      指标页面显示您选择的指标。

  5. 可选: 要从页面中删除一个或多个指标,在 Metrics to display 部分,请执行以下操作之一:

    • 要删除单个指标,请点击指标名称旁边的 cancel 图标(rhacm)。
    • 要删除所有指标,请点击 Select a metric 列表中的 cancel 图标(swig)。
  6. 可选: 要返回为模型配置 bias 指标,请在指标页面中点击右上角的 Configure

验证

  • 指标页面显示您所做的指标选择。

4.4. 支持的 bias 指标

Red Hat OpenShift AI 支持以下 bias 指标:

统计差异

统计 Parity Difference (SPD)是非特权和特权组之间有合理的结果预测的差异。SPD 的正式定义如下:

SPD 定义
  • swig = 1 是可取而代的结果。
  • DwagonD5- 4 是非特权和特权组数据。

您可以按如下方式解释 SPD 值:

  • 0 表示模型在所选属性(如 race, gender)接近。
  • range -0.10.1 表示模型对于所选属性来说是合理的。相反,您可以将概率与其它因素(如示例大小)不同。
  • range -0.10.1 以外的值表示模型对于所选属性是 unfair。
  • 负值表示模型对非特权组有 bias。
  • 正值表示,模型对特权组具有 bias。
不同的影响率

不同的影响率 (DIR)是非特权组到特权组的可合理结果预测的比例。DIR 的正式定义如下:

DIR 定义
  • swig = 1 是可取而代的结果。
  • DwagonD5- 4 是非特权和特权组数据。

识别 bias 的阈值取决于您的标准和特定的用例。

例如,如果您的标识 bias 的阈值由 0.8 或大于 1.2 的 DIR 值表示,您可以解释 DIR 值,如下所示:

  • 1 表示模型对于所选属性是平平的。
  • 0.81.2 之间的值表示模型对于所选属性来说是合理的。
  • 值低于 0.8 或以上 1.2 表示 bias。

第 5 章 监控数据偏移

作为数据科学家,您可能需要监控部署的数据偏移模型。数据偏移指的是传入数据的分布或属性的变化,这些数据与最初接受模型的数据有很大不同。检测数据偏移有助于确保您的模型继续按预期执行,并且它们保持准确且可靠。

您可以使用来自 Red Hat OpenShift AI 的 TrustyAI 的数据偏移监控指标,以提供培训数据和推测数据之间的一致定量度量。

有关特定数据偏移指标的详情,请参考 支持的偏移指标

5.1. 创建偏移指标

要监控部署的数据偏移模型,您必须首先创建偏移指标。

有关特定数据偏移指标的详情,请参考 支持的偏移指标

有关 TrustyAI 指标的完整列表,请参阅 TrustyAI 服务 API

5.1.1. 使用 CLI 创建偏移指标

您可以使用 OpenShift 命令行界面(CLI)为模型创建数据偏移指标。

先决条件

  • 熟悉特定的数据集模式,并了解相关的输入和输出。
  • 您的 OpenShift 集群管理员作为用户添加到 OpenShift 集群,并为包含部署模型的数据科学项目安装了 TrustyAI 服务。
  • 为您的数据科学项目设置 TrustyAI,如 为项目设置 TrustyAI 中所述。

流程

  1. 打开一个新的终端窗口。
  2. 按照以下步骤登录到 OpenShift 集群:

    1. 在 OpenShift Web 控制台右上角,单击您的用户名,然后选择 Copy login command
    2. 登录后,单击 Display token
    3. 使用此令牌命令复制登录,并将它粘贴到 OpenShift 命令行界面(CLI)中

      $ oc login --token=<token> --server=<openshift_cluster_url>
  3. TRUSTY_ROUTE 变量设置为 TrustyAI 服务 pod 的外部路由。

    TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  4. (可选)获取 TrustyAI 服务端点和有效负载的完整列表。

    curl -H "Authorization: Bearer $TOKEN" --location $TRUSTY_ROUTE/q/openapi
  5. 使用 POST /metrics/drift/meanshift/request 来调度带有以下语法和有效负载结构的重复偏移监控指标:

    语法

    curl -k -H "Authorization: Bearer $TOKEN" -X POST --location $TRUSTY_ROUTE/metrics/drift/meanshift/request \
     --header 'Content-Type: application/json' \
     --data <payload>

    有效负载结构

    modelId
    要监控的模型的名称。
    referenceTag
    用作参考分发的数据。

例如:

curl -k -H "Authorization: Bearer $TOKEN" -X POST --location $TRUSTY_ROUTE/metrics/drift/meanshift/request \
     --header 'Content-Type: application/json' \
     --data "{
                 \"modelId\": \"gaussian-credit-model\",
                 \"referenceTag\": \"TRAINING\"
             }"

5.2. 使用 CLI 删除偏移指标

您可以使用 OpenShift 命令行界面(CLI)删除模型的偏移指标。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您有一个用于身份验证的用户令牌,如 验证 TrustyAI 服务 中所述。
  • 您要删除的现有偏移指标。

流程

  1. 打开一个新的终端窗口。
  2. 按照以下步骤登录到 OpenShift 集群:

    1. 在 OpenShift Web 控制台中,单击您的用户名并选择 Copy login command
    2. 登录后,单击 Display token
    3. 使用此令牌命令复制登录,并将它粘贴到 OpenShift 命令行界面(CLI)中

      $ oc login --token=<token> --server=<openshift_cluster_url>
  3. 在 OpenShift CLI 中,获取到 TrustyAI 服务的路由:

    TRUSTY_ROUTE=https://$(oc get route/trustyai-service --template={{.spec.host}})
  4. 可选: 要列出指标的所有当前活跃请求,请使用 GET /metrics/{{metric}}/requests。例如,要列出所有当前调度的 MeanShift 指标,请输入:

    curl -k -H "Authorization: Bearer $TOKEN" -X GET --location "$TRUSTY_ROUTE/metrics/drift/meanshift/requests"

    或者,要列出所有当前调度的指标请求,请使用 GET /metrics/all/requests

    curl -H "Authorization: Bearer $TOKEN" -X GET --location "$TRUSTY_ROUTE/metrics/all/requests"
  5. 要删除指标,请将 HTTP DELETE 请求发送到 /metrics/$METRIC/request 端点,以停止定期计算,包括要在有效负载中取消的定期任务 ID。例如:

    curl -k -H "Authorization: Bearer $TOKEN" -X DELETE --location "$TRUSTY_ROUTE/metrics/drift/meanshift/request" \
        -H "Content-Type: application/json" \
        -d "{
              \"requestId\": \"$id\"
            }"

验证

使用 GET /metrics/{{metric}}/requests 列出指标的所有当前活动请求,并验证您删除的指标没有显示。例如:

curl -H "Authorization: Bearer $TOKEN" -X GET --location "$TRUSTY_ROUTE/metrics/drift/meanshift/requests"

5.3. 查看模型的数据偏移指标

创建数据偏移监控指标后,使用 OpenShift Web 控制台查看和更新您配置的指标。

先决条件

流程

  1. 登录 OpenShift Web 控制台。
  2. 切换到 Developer 视角。
  3. 在左侧菜单中,点 Observe
  4. 如监控 项目指标 中所述,使用 Web 控制台运行对 trustyai 的 metrics 的查询。

5.4. 支持的偏移指标

Red Hat OpenShift AI 支持以下数据偏移指标:

MeanShift

MeanShift 指标计算测试数据集中的数据值来自与培训数据集中相同的分布值(假设这些值通常分布式)。此指标测量两个数据集之间特定功能的方法的不同。

MeanShift 对于识别数据分发中的直接更改很有用,例如当整个发行版已转移到功能的左侧或右侧。

此指标返回"真实世界"数据所看到的发行版可能源自与引用数据相同的发行版。更接近的值是 0,很可能有显著的偏移量。

FourierMMD

FourierMMD 指标提供了概率:测试数据集中的数据值已从培训数据集分发中偏离,假设计算的最大 Mean Discrepancy (MMD)值通常会被分发。此指标使用 Fourier 域中的 MMD 测量比较数据集的 empirical 发行版。

FourierMMD 有助于检测数据分布中的细微变化,这些变化可能被更简单的统计措施覆盖。

此指标返回可能性,"real world"数据所看到的分布已从引用数据中偏离。更接近的数值是 1,很可能存在显著的偏移量。

KSTest

KSTest 指标计算每个列的两个 Kolmogorov-Smirnov 测试,以确定数据集是否从同一发行版衍生而来。此指标测量数据集的电子累积分发函数(CDF)之间的最大距离,而不假设任何特定的底层分布功能。

KSTest 有助于检测分布形式、位置和规模的变化。

此指标返回"真实世界"数据所看到的发行版可能源自与引用数据相同的发行版。更接近的值是 0,很可能有显著的偏移量。

ApproxKSTest

ApproxKSTest 指标执行大约 Kolmogorov-Smirnov 测试,确保与确切的 KSTest 相比的最大错误为 6*epsilon

ApproxKSTest 有助于检测执行精确 KSTest 的大型数据集的更改。

此指标返回"真实世界"数据所看到的发行版可能源自与引用数据相同的发行版。更接近的值是 0,很可能有显著的偏移量。

第 6 章 评估大型语言模型

大型语言模型(LLM)是一种人工智能(AI)程序,专为自然语言处理任务而设计,如识别和生成文本。

作为数据科学家,您可能需要针对一系列指标监控大型语言模型,以确保其输出的准确性和质量。可以评估 summarization、language toxicity 和 questions-answering 准确性等功能,以通知和改进您的模型参数。

Red Hat OpenShift AI 现在在称为 LM-Eval 的功能中提供语言模型评估即服务(LM-Eval-aaS)。LM-Eval 提供了一个统一的框架,可在大量不同的评估任务中测试通用语言模型。

以下小节介绍了如何创建一个 LMEvalJob 自定义资源(CR),它允许您激活评估作业并生成对模型功能进行分析。

6.1. 设置 LM-Eval

LM-Eval 是一个用于评估已集成到 TrustyAI Operator 的大型语言模型的服务。

该服务基于两个开源项目构建:

  • LM 评估 Harness 由 EleutherAI 开发,它为评估语言模型提供了全面的框架
  • Unitxt,一种通过额外功能增强评估过程的工具

以下信息解释了如何创建 LMEvalJob 自定义资源(CR)来启动评估作业并获取结果。

LM-Eval 的全局设置

LM-Eval 服务的可配置全局设置存储在 TrustyAI operator global ConfigMap 中,名为 trustyai-service-operator-config。全局设置位于与 Operator 相同的命名空间中。

您可以为 LM-Eval 配置以下属性:

Expand
表 6.1. LM-Eval 属性
属性默认描述

lmes-detect-device

true/false

检测是否有 GPU 可用,并为 LM 评估 Harness 分配一个值 for-device 参数。如果 GPU 可用,则值为 cuda。如果没有可用的 GPU,则值为 cpu

lmes-pod-image

quay.io/trustyai/ta-lmes-job:latest

LM-Eval 作业的镜像。该镜像包含 LM 评估 Harness 和 Unitxt 的 Python 软件包。

lmes-driver-image

quay.io/trustyai/ta-lmes-driver:latest

LM-Eval 驱动程序的镜像。有关驱动程序的详情,请查看 cmd/lmes_driver 目录。

lmes-image-pull-policy

Always

运行评估作业时的 image-pulling 策略。

lmes-default-batch-size

8

调用模型 inference API 时的默认批处理大小。默认批处理大小仅适用于本地模型。

lmes-max-batch-size

24

用户可以在评估作业中指定的最大批处理大小。

lmes-pod-checking-interval

10s

检查作业 pod 是否有评估作业的时间间隔。

lmes-allow-online

true

LMEval 作业是否可以将在线模式设置为 on 以访问来自互联网的工件(models, datasets, tokenizers)。

lmes-code-execution

true

决定 LMEval 作业是否可以在 上将 信任远程代码 模式设置为。

在更新 ConfigMap 中的设置后,重启 Operator 以应用新值。

重要

在 Red Hat OpenShift AI 的 operator 级别中默认禁用 allowOnline 设置,因为使用 allowOnline 可让作业从外部源自动下载工件。

启用 allowOnline 模式

要启用 allowOnline 模式,使用以下代码修补 TrustyAI operator ConfigMap

 kubectl patch configmap trustyai-service-operator-config -n redhat-ods-applications \
--type merge -p '{"data":{"lmes-allow-online":"true","lmes-allow-code-execution":"true"}}'

然后,使用以下方法重启 TrustyAI operator:

kubectl rollout restart deployment trustyai-service-operator-controller-manager -n redhat-ods-applications

6.2. LM-Eval 评估作业

LM-Eval 服务定义一个名为 LMEvalJob 的新自定义资源定义(CRD)。LMEvalJob 对象代表评估作业。LMEvalJob 对象由 TrustyAI Kubernetes operator 监控。

要运行评估作业,请使用以下信息创建一个 LMEvalJob 对象: model, model parameters, task, 和 secret

创建 LMEvalJob 后,LM-Eval 服务将运行评估作业。当信息可用时 ,LMEvalJob 对象的状态和结果会更新。

注意

其他 TrustyAI 功能(如 bias 和 drift metrics)不支持非稳定模型(包括 LLM)。在包含非稳定模型(如执行评估作业的命名空间)的命名空间中部署 TrustyAIService 自定义资源(CR)可能会导致 TrustyAI 服务中的错误。

LMEvalJob 对象示例

LMEvalJob 对象示例包含以下功能:

  • Hugging Face 的 google/flan-t5-base 模型。
  • wnli 卡中的数据集,部分来自 Hugging Face 的 GLUE (General Language Understand assessment)评估框架。有关 wnli Unitxt 卡的更多信息,请参阅 Unitxt 网站。
  • 以下 multi_class.relation Unitxt 任务的默认参数: f1_microf1_macroaccuracy。此模板可以在 Unitxt 网站中找到:单击 Catalog,然后单击 Tasks,然后从菜单中选择 Classification

以下是 LMEvalJob 对象示例:

apiVersion: trustyai.opendatahub.io/v1alpha1
kind: LMEvalJob
metadata:
  name: evaljob-sample
spec:
  model: hf
  modelArgs:
  - name: pretrained
    value: google/flan-t5-base
  taskList:
    taskRecipes:
    - card:
        name: "cards.wnli"
      template: "templates.classification.multi_class.relation.default"
  logSamples: true

应用示例 LMEvalJob 后,使用以下命令检查其状态:

oc get lmevaljob evaljob-sample

显示类似于如下的输出: NAME: evaljob-sample STATE: Running

当对象状态变为 Complete 时,可以使用评估结果。本例中的 model 和 dataset 都很小。评估作业应在仅 CPU 节点的 10 分钟内完成。

使用以下命令获取结果:

oc get lmevaljobs.trustyai.opendatahub.io evaljob-sample \
  -o template --template={{.status.results}} | jq '.results'

该命令返回类似以下示例的结果:

{
  "tr_0": {
    "alias": "tr_0",
    "f1_micro,none": 0.5633802816901409,
    "f1_micro_stderr,none": "N/A",
    "accuracy,none": 0.5633802816901409,
    "accuracy_stderr,none": "N/A",
    "f1_macro,none": 0.36036036036036034,
    "f1_macro_stderr,none": "N/A"
  }
}

有关结果的备注

  • f1_microf1_macro 和准确性 分数为 0.56、0.36 和 0.56。
  • 完整结果存储在 LMEvalJob 对象的 .status.results 中,作为 JSON 文档。
  • 以上命令仅检索 JSON 文档的 results 字段。

LMEvalJob 属性

下表列出了 LMEvalJob 及其用法中的每个属性:

Expand
表 6.2. LM-Eval 属性
参数描述

model

指定评估哪个模型类型或供应商。此字段直接映射到 lm-evaluation-harness 的-- model 参数。支持的模型类型和供应商包括:

  • HF: HuggingFace 模型
  • openai-completions: OpenAI Completions API 模型
  • openai-chat-completions: OpenAI Chat Completions API 模型
  • local-completionslocal-chat-completions: OpenAI API 兼容服务器
  • textsynth: TextSynth API

modelArgs

模型类型的对名称和值参数的列表。每种模型类型或供应商都支持不同的参数。您可以在 GitHub 上 LM 评估 Harness 库的 models 部分找到更多详细信息。

  • HF (HuggingFace)
  • local-completions (An OpenAI API 兼容服务器)
  • local-chat-completions (An OpenAI API 兼容服务器)
  • openai-completions (OpenAI Completions API 模型)
  • openai-chat-completions (ChatCompletions API 模型)
  • 文本( TextSynth API)

taskList.taskNames

指定 lm-evaluation-harness 支持的任务列表。

taskList.taskRecipes

使用 Unitxt method 格式指定任务:

  • Card: 使用名称指定 Unitxt 卡或 custom 用于自定义卡。

    • Name :指定 Unitxt 目录中的 Unitxt 卡。使用卡 ID 作为值。例如,Wnli 卡的 ID 是 card .wnli
    • Custom:定义和使用自定义卡。该值是一个包含自定义 dataset 的 JSON 对象。有关创建自定义卡的更多信息,请参阅其网站上的 Unitxt 文档。如果自定义卡使用的 dataset 需要环境变量或持久性卷中的 API 密钥,请在 pod 字段中配置必要的资源。
  • template :指定 Unitxt 目录中的 Unitxt 模板。使用模板 ID 作为值。
  • task (可选):指定 Unitxt 目录中的 Unitxt 任务。使用任务 ID 作为值。Unitxt 卡有一个预定义的任务。只有在您要运行其他任务时,才为这个值指定一个值。
  • metrics (可选):指定 Unitxt 目录中的 Unitxt 任务。使用指标 ID 作为值。Unitxt 任务包含一组预定义的指标。只有在需要不同的指标时,才指定一组指标。
  • 格式 (可选):指定 Unitxt 目录中的 Unitxt 格式。使用格式 ID 作为值。
  • loaderLimit (可选):指定从加载程序返回的每个流的最大实例数量。您可以使用此参数来减少大型数据集中的加载时间。
  • numDemos (可选):要使用的几个照片的数量。
  • demosPoolSize (可选): few-shot 池的大小。

numFewShot

设置上下文中要放入的几片示例的数量。如果您使用来自 Unitxt 的任务,请不要使用此字段。在 taskRecipes 下使用 numDemos

limit

设置限制以运行任务,而不是运行整个数据集。接受 0.0 到 1.0 之间的整数或浮点值。

genArgs

映射到 lm-evaluation-harness 的- gen_kwargs 参数。如需更多信息,请参阅 GitHub 上的 LM 评估 Harness 文档。

logSamples

如果传递此标志,则模型输出并将文本保存到模型中,按文档粒度保存。

batchSize

以整数格式指定评估的批处理大小。auto:N batch 大小不用于 API 模型,而是用于 API 的数字批处理大小。

pod

指定 lm-eval 作业 pod 的额外信息:

  • Container : 指定 lm-eval 容器的额外容器设置。

    • env :指定环境变量。此参数使用 Kubernetes 的 EnvVar 数据结构。
    • volumeMounts: 将卷挂载到 lm-eval 容器中。
    • resources :指定 lm-eval 容器的资源。
  • volumes :指定 lm-eval 和其他容器的卷信息。此参数使用 Kubernetes 的卷数据结构。
  • Sidecars :与 lm-eval 容器一起运行的容器列表。它使用 Kubernetes 的容器数据结构。

输出

此参数定义用于存储评估结果的自定义输出位置。仅支持持久性卷声明(PVC)。

outputs.pvcManaged

创建一个 Operator 管理的 PVC 来存储作业结果。PVC 被命名为 & lt;job-name>-pvc,并由 LMEvalJob 所有。在作业完成后,PVC 仍然可用,但会随 LMEvalJob 删除。支持以下字段:

  • 大小 : PVC 大小,与标准 PVC 语法兼容(如 5Gi)

outputs.pvcName

通过指定其名称来将现有 PVC 绑定到作业。PVC 必须单独创建,且必须在创建作业时已存在。

allowOnline

如果此参数设为 true,则 LMEval 作业下载工件(如模型、数据集或令牌程序)。如果设置为 false,则不会下载工件,并从本地存储中提取工件。默认禁用此设置。如果要启用 allowOnline 模式,您可以修补 TrustyAI operator ConfigMap

allowCodeExecution

如果此参数设为 true,则 LMEval 作业将执行必要的代码来准备模型或数据集。如果设置为 false,则不会执行下载的代码。

离线

将 PVC 挂载为模型和数据集的本地存储。

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"
  2. (可选)您还可以创建一个 secret 来存储令牌,然后使用以下引用语法从 secretKeyRef 对象中引用密钥:

    env:
      - name: HF_TOKEN
        valueFrom:
          secretKeyRef:
            name: my-secret
            key: hf-token

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
  2. 在自定义卡中,指定 Hugging Face dataset 加载程序:

    "loader": {
                  "__type__": "load_hf",
                  "path": "glue",
                  "name": "wnli"
                },
  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

代码备注

  • 输出 是指定自定义存储位置的部分
  • 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
  2. 引用 LMEvalJob 中的新 PVC。

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

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
  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
  • secretKeyRef.key 设置为 token

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部