当前位置: 首页 > article >正文

ms-swift 代码推理数据集

目前想要对SFT微调后的模型进行测试,看官方文档ms-swift中有eval的教程,但是从介绍来看,eval使用的是modelscope的评测内容。

评测

SWIFT支持了eval(评测)能力,用于对原始模型和训练后的模型给出标准化的评测指标。

能力介绍

SWIFT的eval能力使用了魔搭社区评测框架EvalScope,并进行了高级封装以支持各类模型的评测需求。

注意:EvalScope支持许多其他的复杂能力,例如模型的性能评测,请直接使用EvalScope框架。

目前我们支持了标准评测集的评测流程,以及用户自定义评测集的评测流程。其中标准评测集由三个评测后端提供支持:

下面展示所支持的数据集名称,若需了解数据集的详细信息,请参考所有支持的数据集

    可以从上述内容中看到,评估起来比较麻烦,而且针对用户自定义的测评集,需要自己重新生成csv(选择题)或者jsonl(问答题)

    问答题格式(QA)

    适合用户是问答题的场景,评测指标是ROUGEBLEU

    数据准备

    准备一个问答题格式的jsonline文件,该目录包含了一个文件:

    qa/
    └── example.jsonl
    

    该jsonline文件需要为下面的格式:

    {"query": "中国的首都是哪里?", "response": "中国的首都是北京"}
    {"query": "世界上最高的山是哪座山?", "response": "是珠穆朗玛峰"}
    {"query": "为什么北极见不到企鹅?", "response": "因为企鹅大多生活在南极"}
    

    启动评测

    运行下面的命令:

    CUDA_VISIBLE_DEVICES=0 \
    swift eval \--model Qwen/Qwen2.5-0.5B-Instruct \--eval_backend Native \--infer_backend pt \--eval_dataset general_qa \--dataset_args '{"general_qa": {"local_path": "/path/to/qa", "subset_list": ["example"]}}'
    

    其中:

    • eval_dataset 需要设置为 general_qa

    • dataset_args 是一个json字符串,需要设置:

      • local_path 自定义数据集文件夹路径

      • subset_list 评测数据集名称,上述 *.jsonl 中的 *

    总体上来说,评估起来比较麻烦,如果我们想要使用代码完成推理并且输出至某个文件中,可以使用swift库来实现,目前使用的swift版本为3.4.0,推理代码目前是封装的比较好的,下述的代码实现了流式推理。即可以从评测数据集中完成 先加载模型,后使用数据集中的单条数据进行推理,推理后可存储至指定文件中。

    
    import os
    from typing import List, Literal
    from swift.llm import InferEngine, InferRequest, PtEngine, RequestConfig, load_dataset
    from swift.plugin import InferStats
    from PIL import Image  # 处理图像输入(可选,根据模型要求)os.environ['ASCEND_RT_VISIBLE_DEVICES'] = '0'def infer_stream(engine: 'InferEngine', infer_request: 'InferRequest'):"""流式推理函数(Pt后端)"""request_config = RequestConfig(max_tokens=1024, temperature=1, stream=True)metric = InferStats()gen_list = engine.infer([infer_request], request_config, metrics=[metric])return gen_listquery = infer_request.messages[0]['content']#print(f"流式推理 - 查询: {query}\n响应: ", end='')# for resp in gen_list[0]:#     if resp and resp.choices:#         print(resp.choices[0].delta.content, end='', flush=True)# #print(f"\n性能指标: {metric.compute()}\n")return result# 获取推理结果def build_image_message(image_path: str, query: str):"""构建图像+文本输入消息(Pt后端兼容格式)"""return {'role': 'user','content': [{'type': 'image', 'image': image_path},  # 支持本地路径/URL/Base64/PIL.Image{'type': 'text', 'text': query}]}infer_backend = 'pt'  # 使用Pt后端
    model = 'internvloutput/v3-20250507-190220/checkpoint-300-merged'  # Qwen2-VL模型(可替换为本地路径)
    image_url = "demo.jpg"  # 示例图像URL# ====================== 初始化Pt推理引擎 ======================
    engine = PtEngine(model_id_or_path=model,max_batch_size=1,  # 根据GPU显存调整(34B模型建议设为1-2)device_map='auto'  # 自动分配设备(支持多卡,但需确保模型支持)
    )with open('./test-2.jsonl', 'r', encoding='utf-8') as infile:total_lines = sum(1 for _ in infile)# 打开输入的txt文件和输出的log文件#../wsu-data/test/txt/PATH_DT_WSU_split_test_labels.txt
    #../lung_colon_image_set/test-more.jsonl
    with open('./test-2.jsonl', 'r', encoding='utf-8') as infile, open('output-gas-05091.log', 'w', encoding='utf-8') as outfile:# 逐行读取txt文件# for line in infile:for i, line in enumerate(infile, 1):try:# print(i)# 导入ast模块,用于将字符串转换为Python对象import ast# 将每行字符串转换为Python字典data = ast.literal_eval(line.strip())# 提取messages列表messages = data.get('messages', [])# 提取images列表images = data.get('images', [])content_count=0# 遍历messages列表,提取每个message的content内容for message in messages:content = message.get('content', '')if content_count == 0:question=content# print(question)# 将content内容写入log文件outfile.write(f"Content: {content}\n")content_count=content_count+1# 遍历images列表,提取每个image的路径for image_path in images:# 将image路径写入log文件# image_path=image_path.replace('../images/', '../wsu-data/test/images/')image_path=image_path.replace('gastric_image_set/', './gastric_image_set/')# image_path=image_path.replace('wsu-data/', '../wsu-data/')image1 = image_pathoutfile.write(f"Image Path: {image_path}\n")outfile.write("·" * 50 + "\n")    # conversation = [#     {#         "role": "User",#         "content": f"<image_placeholder>\n{question}",#         "images": [image1],#     },#     {"role": "Assistant", "content": ""},# ]# ====================== 构建推理请求 ======================
    #          1. 单样本流式推理(图像+文本)user_message = build_image_message(image_path=image1,query=question,)infer_request_stream = InferRequest(messages=[user_message])gen_list = infer_stream(engine, infer_request_stream)outfile.write("Answer:")for resp in gen_list[0]:if resp and resp.choices:# print(resp.choices[0].delta.content, end='', flush=True)outfile.write(resp.choices[0].delta.content)outfile.write("\n")# 每20行打印一次进度if i % 20 == 0 or i == total_lines:print(f"已处理 {i}/{total_lines} 行 ({i/total_lines:.1%})")                   # 在每组数据之间添加分隔线outfile.write("-" * 50 + "\n")except (SyntaxError, ValueError):# 处理转换过程中可能出现的语法错误或值错误print(f"Error processing line: {line.strip()}")
    

    上述代码即可实现swift的python 代码推理,从jsonl文件中读取测试数据,加载InternVL3进行推理,可直接修改代码中的数据集目录以及存储文件目录即可完成推理。

    不足之处:尚未调试batch推理的代码,单条推理速度较低,下一步Todo :支持batch 推理

    相关文章:

    ms-swift 代码推理数据集

    目前想要对SFT微调后的模型进行测试&#xff0c;看官方文档ms-swift中有eval的教程&#xff0c;但是从介绍来看&#xff0c;eval使用的是modelscope的评测内容。 评测 SWIFT支持了eval&#xff08;评测&#xff09;能力&#xff0c;用于对原始模型和训练后的模型给出标准化…...

    AXI4总线协议 ------ AXI_LITE协议

    一、AXI 相关知识介绍 https://download.csdn.net/download/mvpkuku/90841873 AXI_LITE 选出部分重点&#xff0c;详细文档见上面链接。 1.AXI4 协议类型 2.握手机制 二、AXI_LITE 协议的实现 1. AXI_LITE 通道及各通道端口功能介绍 2.实现思路及框架 2.1 总体框架 2.2 …...

    DATE_FORMAT可以接收date类型,也可以接收String类型!

    DATE_FORMAT 是 SQL 函数&#xff0c;主要用于将日期/时间类型的字段按照指定格式转换成字符串。在 MyBatis 的 XML 动态 SQL 中&#xff0c;你看到的这段代码是为了比较数据库中的日期字段和传入参数的日期值&#xff0c;但会忽略时间部分&#xff0c;只比较年月日。 代码解释…...

    Ubuntu24.04 安装 5080显卡驱动以及cuda

    前言 之前使用Ubuntu22.04版本一直报错,然后换了24.04版本才能正常安装 一. 配置基础环境 Linux系统进行环境开发环境配置-CSDN博客 二. 安装显卡驱动 1.安装驱动 按以下步骤来&#xff1a; sudo apt update && sudo apt upgrade -y#下载最新内核并安装 sudo add…...

    华三H3C交换机配置NTP时钟步骤 示例

    现场1台H3C 5110交换机 版本&#xff1a;Comware Software, Version 5.20.99, Release 1105 当前没有指定NTP&#xff0c; <H3C-5110>dis ntp-service status Clock status: unsynchronizedClock stratum: 16Reference clock ID: noneNominal frequency: 100.0000 HzAc…...

    RKNN开发环境搭建(ubuntu22.04)

    以下情况在RV1106G3的平台上验证正常。 1、conda安装 1&#xff09;conda --version//确认是否安装 2&#xff09;创建一个安装目录&#xff0c;进行下一步 3&#xff09;wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x…...

    matlab多项式

    1. 多项式表示 多项式用行向量表示&#xff0c;按降幂排列系数。例如&#xff0c;多项式 3x22x1 表示为 [3 2 1]。 2. 创建多项式 直接输入系数&#xff1a;如 p [1 -3 3 -1] 表示 x3−3x23x−1。由根创建&#xff1a;使用 poly 函数。例如&#xff0c;根为 [1, 1, 1]&…...

    Sprnig MVC 如何统一异常处理 (Exception Handling)?

    主要有以下几种方式来实现统一异常处理&#xff0c;其中 ControllerAdvice (或 RestControllerAdvice) 结合 ExceptionHandler 是最常用的方式。 1. ExceptionHandler 注解 作用&#xff1a; 用于标记一个方法&#xff0c;该方法将处理在同一个 Controller 类中抛出的特定类型…...

    SpringAI-RC1正式发布:移除千帆大模型!

    续 Spring AI M8 版本之后&#xff08;5.1 发布&#xff09;&#xff0c;前几日 Spring AI 悄悄的发布了最新版 Spring AI 1.0.0 RC1&#xff08;5.13 发布&#xff09;&#xff0c;此版本也将是 GA&#xff08;Generally Available&#xff0c;正式版&#xff09;发布前的最后…...

    操作系统之进程和线程听课笔记

    计算机的上电运行就是构建进程树,进程调度就是在进程树节点进程进行切换 进程间通信的好处 经典模型 生产者和消费者 进程和线程的区别 线程引入带来的问题线程的优势 由于unix70年代产生,90年代有线程,当时数据库系统操作需要线程,操作系统没有来得及重造,出现了用户态线…...

    【vue】封装接口,全局字典,表格表头及使用

    一、封装接口&#xff08;API请求&#xff09; 1. 创建axios实例 // src/utils/request.js import axios from axiosconst service axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 10000 })// 请求拦截器 service.interceptors.request.use(config > {co…...

    深入解析ZAB协议:ZooKeeper的分布式一致性核心

    引言 在分布式系统中&#xff0c;如何高效、可靠地实现多节点间的数据一致性是核心挑战之一。ZAB协议&#xff08;ZooKeeper Atomic Broadcast&#xff09;作为 ZooKeeper的核心算法&#xff0c;被广泛应用于分布式协调服务&#xff08;如Kafka、HBase、Dubbo等&#xff09;。…...

    COMSOL随机参数化表面流体流动模拟

    基于粗糙度表面的裂隙流研究对于理解地下水的流动、污染物传输以及与之相关的地质灾害&#xff08;如滑坡&#xff09;等方面具有重要意义。本研究通过蒙特卡洛方法生成随机表面形貌&#xff0c;并利用COMSOL Multiphysics对随机参数化表面的微尺度流体流动进行模拟。 参数化…...

    大模型笔记-“训练”和“推理”概念

    在大模型&#xff08;如Transformer类模型、LLM&#xff09;的资源管理和开发流程中&#xff0c;“训练”和“推理”是两个核心概念&#xff0c;分别对应模型的构建和实际应用阶段&#xff1a; 训练是模型的“学习过程”&#xff0c;需要大量资源和时间。推理是模型的“应用过…...

    JavaSwing中的容器之--JScrollPane

    JavaSwing中的容器之–JScrollPane 在Java Swing中&#xff0c;容器是用于容纳其他组件&#xff08;如按钮、标签等&#xff09;的组件。Swing提供了多种容器&#xff0c;它们可以嵌套使用以创建复杂的用户界面。 JScrollPane是一个轻量级组件&#xff0c;提供可滚动视图。JSc…...

    使用 Cookie 实现认证跳转功能

    使用 Cookie 实现认证跳转功能的实践与解析 在 Web 开发中&#xff0c;用户身份认证是一个基础而关键的功能点。本文将通过一个简单的前后端示例系统&#xff0c;介绍如何基于 Cookie 实现 Token 保存与自动跳转认证的功能&#xff0c;并结合 Cookie 与 Header 的区别、使用场…...

    Reth(冗余以太网接口) 和Bridge-Aggregation(链路聚合接口)区别

    Reth&#xff08;Redundant Ethernet&#xff09;与Bridge-Aggregation是H3C设备中两种不同的接口技术&#xff0c;主要区别体现在工作原理、应用场景及配置特性上。以下是详细对比分析&#xff1a; 定义与类型 Reth&#xff08;冗余以太网接口&#xff09; 类型&#xff1a;…...

    (面试)Android各版本新特性

    Android 6.0 (Marshmallow, API 23) 运行时权限管理&#xff1a;用户可在应用运行时动态授予或拒绝权限&#xff0c;取代安装时统一授权4。Doze模式与应用待机&#xff1a;优化后台耗电&#xff0c;延长设备续航5。指纹识别支持&#xff1a;原生API支持指纹身份验证。 Android…...

    算法基础 -- 小根堆构建的两种方式:上浮法与下沉法

    小根堆构建的两种方式&#xff1a;上浮法与下沉法 在构建小根堆&#xff08;Min-Heap&#xff09;时&#xff0c;通常有两种常见的构建方式&#xff1a; 上浮建堆&#xff08;逐个插入&#xff0c;上浮调整&#xff09;下沉建堆&#xff08;Heapify 自底向上&#xff0c;下沉…...

    LED接口设计

    一个LED灯有3种控制状态&#xff0c;常亮、常灭和闪烁&#xff0c;要做到这种控制最简单的一种方法是使用任何一款处理器的普通IO去控制。 用IO控制方式有两种&#xff0c;一种是高有效&#xff0c;如下图1所示IO口为高电平时LED亮&#xff0c;IO为低电平时LED不亮。IO口出一个…...

    西安前端面试

    面试1 1.vue2和vue3的原理及区别 2.伪数组 3.对箭头函数怎么理解的 4.vue父子组件传值的几种方式 5.对Promise的理解 面试2 1.两个升序数组实现合并升序排序 2.数组拍平[3, [[7, [1, 5]], 4], 8, [6]] 面试3 1.let var const的区别&#xff0c;什么时候const能改变 …...

    SpringBoot项目使用POI-TL动态生成Word文档

    近期项目工作需要动态生成Word文档的需求&#xff0c;特意调研了动态生成Word的技术方案。主要有以下两种&#xff1a; 第一种是FreeMarker模板来进行填充&#xff1b;第二种是POI-TL技术使用Word模板来进行填充&#xff1b; 以下是关于POI-TL的官方介绍 重点关注&#xff1…...

    java高效实现爬虫

    一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对JavaScript渲染、Ajax加载等复杂场景。而集成代理服务则能够解决IP限制、地域访问限制等问题。本文将详细介绍如何利用JavaSelenium快代理实…...

    YOLOv3深度解析:多尺度特征融合与实时检测的里程碑

    一、YOLOv3的诞生&#xff1a;继承与突破的起点 YOLOv3作为YOLO系列的第三代算法&#xff0c;于2018年由Joseph Redmon等人提出。它在YOLOv2的基础上&#xff0c;针对小目标检测精度低、多类别标签预测受限等问题进行了系统性改进。通过引入多尺度特征图检测、残差网络架构和独…...

    uniapp-商城-60-后台 新增商品(属性的选中和页面显示)

    前面添加了属性&#xff0c;添加属性的子级项目。也分析了如何回显&#xff0c;但是在添加新的商品的时&#xff0c;我们也同样需要进行选择&#xff0c;还要能正常的显示在界面上。下面对页面的显示进行分析。 1、界面情况回顾 属性显示其实是个一嵌套的数据显示。 2、选中的…...

    虹科技术 | 简化汽车零部件测试:LIN/CAN总线设备的按键触发功能实现

    汽车零部件测试领域对操作的便捷性要求越来越高&#xff0c;虹科Baby-LIN-RC系列产品为这一需求提供了完美的解决方案。从基础的按键设置到高级的Shift键应用&#xff0c;本文将一步步引导您了解虹科Baby-LIN-RC系列产品的智能控制之道。 虹科Baby-LIN-3-RC 想象一下&#xff0…...

    单片机ESP32天气日历闹铃语音播报

    自制Arduino Esp32 单片机 可以整点语音播报&#xff0c;闹铃语音播报&#xff0c;农历显示&#xff0c;白天晚上天气&#xff0c;硬件有 Esp32&#xff0c;ST7789显示屏&#xff0c;Max98357 喇叭驱动&#xff0c;小喇叭一枚。有需要源码的私信我。#单片机 #闹钟 #嵌入式 #智能…...

    如何解决LCMS 液质联用液相进样器定量环漏液问题

    以下是解决安捷伦1260液相色谱仪为例的进样器定量环漏液问题的一些方法&#xff1a;视频操作 检查相关部件 检查定量环本身&#xff1a;观察定量环是否有破损、裂纹或变形等情况。如果发现定量环损坏&#xff0c;需及时更换。检查密封垫&#xff1a;查看进样阀的转子密封垫、计…...

    服务器内部可以访问外部网络,docker内部无法访问外部网络,只能docker内部访问

    要通过 iptables 将容器中的特定端口请求转发到特定服务器&#xff0c;你需要设置 DNAT&#xff08;目标地址转换&#xff09;规则。以下是详细步骤&#xff1a; 假设场景 容器端口: 8080&#xff08;容器内服务监听的端口&#xff09;目标服务器: 192.168.1.100&#xff08;请…...

    机器学习中的特征工程:解锁模型性能的关键

    在机器学习领域&#xff0c;模型的性能往往取决于数据的质量和特征的有效性。尽管深度学习模型在某些任务中能够自动提取特征&#xff0c;但在大多数传统机器学习任务中&#xff0c;特征工程仍然是提升模型性能的关键环节。本文将深入探讨特征工程的重要性、常用方法以及在实际…...