【TVM 教程】Python Target 参数化

赫布法则:从神经科学原理到边缘AI落地的工程实践 赫布法则揭示了神经元通过共激活强化连接的基本学习机制,本质是一种局部、无监督、事件驱动的突触可塑性原理。它不依赖全局误差信号,而是基于输入与输出活动的相关性动态调整权重,为解决深度学习中的梯度崩塌、训练不稳定和边缘设备高功耗等问题提供了生物学可信的替代路径。该原理已深度融入卷积核初始化、自监督对比学习约束、注意力机制重参数化及神经形态芯片在线学习等关键技术环节,尤其在低功耗嵌入式AI、传感数据实时建模和无标签场景表征学习中展现出独特优势。本文聚焦其可建模、可编码、可部署的工程本质,直击从PyTorch原型到 阅读详情

Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →https://tvm.hyper.ai/

摘要

对于任何支持的 runtime,TVM 都应该输出正确的数字结果。因此,在编写验证数字输出的单元测试时,这些单元测试应该在所有支持的 runtime 上都能正常运行。由于这是一个非常常见的用例,TVM 的辅助函数可以对所有单元测试进行参数化,从而便于单元测试在所有启用并具有兼容设备的 target 上运行。

测试套件的单个 Python 函数,可以扩展为几个参数化单元测试,每个单元测试一个 target 设备。为了保证测试正常运行,以下所有条件必须为 True:

  • 测试存在于已经传递给 pytest 的文件或目录中。
  • 应用于函数的 pytest 标记,无论是显式还是通过 target 参数化,都必须与传递给 pytest 的 -m 参数的表达式兼容。
  • 对于使用 target fixture 的参数化测试,target 必须出现在环境变量 TVM_TEST_TARGETS 中。
  • 对于使用 target fixture 的参数化测试,config.cmake 中的构建配置必须启用相应的 runtime。

单元测试文件内容

在多个 target 上运行测试,推荐方法是通过参数化测试。对于一个固定的 target 列表,可以通过用 @tvm.testing.parametrize_targets('target_1', 'target_2', ...) 修饰同时接受 target 或 dev 作为函数参数来显式地完成。

该函数将为列出的每个 target 都运行一遍,并单独报告每个 target 的运行结果(成功/失败)。如果一个 target 因为在 config.cmake 中被禁用而无法运行,或者因为没有合适的硬件存在,那么这个 target 将被报告为跳过。

# 显式列出要使用的 target
@tvm.testing.parametrize_target('llvm', 'cuda')
def test_function(target, dev):
    # 测试代码写在这里

对于在所有 target 上都能正常运行的测试,可以省略装饰器。任何接收 target 或 dev 参数的测试,都将自动在 TVM_TEST_TARGETS 指定的所有 target 上进行参数化。参数化为每个 target 提供了相同的成功/失败/跳过报告,同时允许轻松扩展测试套件,以覆盖额外的 target。

# 隐式参数化以运行在所有 target 上
# 在环境变量 TVM_TEST_TARGETS 里
def test_function(target, dev):
    # 测试代码写在这里

@tvm.testing.parametrize_targets 也可以用作裸装饰器(bare decorator)来显式地进行参数化,但没有额外的效果。

# 隐式参数化以运行在所有 target 上
# 在环境变量 TVM_TEST_TARGETS 里
@tvm.testing.parametrize_targets
def test_function(target, dev):
    # 测试代码写在这里

可以使用 @tvm.testing.exclude_targets 或 @tvm.testing.known_failing_targets 装饰器,将特定 target 排除或标记为预期失败。更多信息,请参阅文档字符串。

在某些情况下,可能需要跨多个参数进行参数化。例如,可能存在一些待测试的 target-specific 实现方法,其中一些 target 的实现方法还不止一个。这可以通过显式地参数化参数元组来完成,如下所示。在这种情况下,只有显式地列出的 target 会运行,但它们仍会应用适当的 @tvm.testing.requires_RUNTIME 标记。

pytest.mark.parametrize('target,impl', [
    ('llvm', cpu_implementation),
    ('cuda', gpu_implementation_small_batch),
    ('cuda', gpu_implementation_large_batch),
])
def test_function(target, dev, impl):
    # 测试代码写在这里

参数化功能是在 pytest 标记之上实现的。每个测试函数都可以用 pytest 标记 装饰以包含元数据。最常用的标记如下:

  • @pytest.mark.gpu - 将函数标记为使用 GPU 功能。这本身是没有效果的,但可以与命令行参数 -m gpu 或 -m 'not gpu' 搭配使用,从而限制 pytest 要执行哪些测试。这不应该单独调用,而应该是单元测试中使用的其他标记的一部分。
  • @tvm.testing.uses_gpu - 应用 @pytest.mark.gpu。用于标记可能使用 GPU 的单元测试(如果有)。只有在显式循环 tvm.testing.enabled_targets() 的测试中,才需要这个装饰器,不过这已经不是编写单元测试的首选方法了(见下文)。使用 tvm.testing.parametrize_targets() 时,此装饰器对于 GPU target 是隐式的,不需要显式地应用。
  • @tvm.testing.requires_gpu - 应用 @tvm.testing.uses_gpu,如果没有 GPU,还要标记这个测试应该被跳过(@pytest.mark.skipif)。
  • @tvfm.testing.requires_RUNTIME - 几个装饰器(例如 @tvm.testing.requires_cuda),如果指定 runtime 不可用,每个装饰器都会跳过测试。runtime 如果在 config.cmake 中被禁用,或是不存在兼容设备时,则该 runtime 不可用。对于使用 GPU 的 runtime,包含 @tvm.testing.requires_gpu。

使用参数化 target 时,每个测试运行都是用跟正在使用的 target 相对应的 @tvm.testing.requires_RUNTIME 修饰的。因此,如果某个 target 在 config.cmake 中被禁用,或没有合适的硬件可以运行,它将被显式列为跳过。

还有 tvm.testing.enabled_targets(),根据环境变量 TVM_TEST_TARGETS、构建配置和存在的物理硬件,返回所有在当前机器上启用和可运行的 target。大多数当前测试显式循环是 enabled_targets() 返回 target,但它无法应用于新测试。这种类型的 pytest 输出会自动跳过在 config.cmake 中禁用,或者没有运行设备的 runtime。此外,测试会在第一个失败的 target 上停止,这对于判断错误是发生在某一个还是所有 target 上,都很困难。

# 老的风格, 已弃用。
def test_function():
    for target,dev in tvm.testing.enabled_targets():
        # 测试代码写在这里

本地运行

要在本地运行 Python 单元测试,可以使用 ${TVM_HOME} 目录中的命令 pytest。

  • 环境变量

    • TVM_TEST_TARGETS 应该是一个用分号分隔的待运行 target 列表。如果未设置,默认是 tvm.testing.DEFAULT_TEST_TARGETS 中定义的 target。

      注意:如果 TVM_TEST_TARGETS 不包含任何已启用且具有该类型可访问设备的 target,则测试将回退到仅在 llvm target 上运行。

    • TVM_LIBRARY_PATH 应该是 libtvm.so 库的路径。例如,这可以用来借助调试版本运行测试。如果未设置,将搜索相对于 TVM 源目录的 libtvm.so。

  • 命令行参数

    • 传递文件夹或文件的路径,将仅在该文件夹或文件中运行单元测试。这一点很实用,例如,避免在未安装特定前端的系统上,运行位于 tests/python/frontend 中的测试。

    • -m 参数仅运行带有特定 pytest 标记的单元测试。最常见的用法是使用 m gpu 仅运行标有 @pytest.mark.gpu 的测试,并使用 GPU 运行。通过传递 m 'not gpu',它也可以用于仅运行不使用 GPU 的测试。

      注意:此过滤发生在基于 TVM_TEST_TARGETS 环境变量选定 target 之后。即使指定了 -m gpu,如果 TVM_TEST_TARGETS 不包含 GPU target,也不会运行任何 GPU 测试。

在本地 Docker 容器中运行

与在 CI 中的用法类似,docker/bash.sh 脚本可用于在同一 Docker 镜像中运行单元测试。第一个参数应指定要运行的 Docker 镜像(例如 docker/bash.sh ci_gpu)。允许的镜像名称在位于 TVM 源目录的 Jenkinsfile 顶部定义,并映射到 tlcpack 中的镜像。

如果没有给出额外的参数,Docker 镜像将被载入一个交互式 bash 会话。如果脚本作为可选参数传递(例如 docker/bash.sh ci_gpu tests/scripts/task_python_unittest.sh),则该脚本将在 Docker 镜像中执行。

注意:Docker 镜像包含所有系统依赖项,但不包括这些系统的 build/config.cmake 配置文件。 TVM 源目录用作 Docker 镜像的主目录,因此这将默认使用与本地配置相同的 config/build 目录。一种解决方案是单独维护 build_local 和 build_docker 目录,并在进入/退出 Docker 时,创建从 build 到相应文件夹的符号链接。

在 CI 中运行

CI 中的所有内容都从 Jenkinsfile 中的任务定义开始的。这包括定义使用哪个 Docker 镜像,编译时配置是什么,以及哪些阶段都各自包含哪些测试。

  • Docker 镜像

    Jenkinsfile 的每个任务(例如 ‘BUILD: CPU’)都会调用 docker/bash.sh。调用 docker/bash.sh 后面的参数定义了 CI 中的 Docker 镜像,就本地类似。

  • Compile-time 配置

    Docker 镜像没有内置 config.cmake 文件,因此这是每个 BUILD 任务的第一步。这一步是使用 tests/scripts/task_config_build_*.sh 脚本完成的。使用哪个脚本取决于正在测试的构建,还需要在 Jenkinsfile 中指定。

    每个 BUILD 任务都以打包一个供以后测试使用的库而结束。

  • 运行哪些测试

    Jenkinsfile 的 Unit Test 和 Integration Test 阶段决定了如何调用 pytest。每个任务都是先解压一个编译库,这个库在先前的 BUILD 阶段已经编译过了。接下来运行测试脚本(如tests/script/task_python_unittest.sh)。这些脚本可以设定文件/文件夹,以及传递给 pytest 的命令行选项。

    其中一些脚本包含 -m gpu 选项,该选项将测试限制为仅运行包含 @pytest.mark.gpu 标记的测试。

昇腾芯片算子开发实战:AKG与TBE双轨制详解 AI加速器的核心性能取决于算子优化,昇腾芯片通过AKG(自动核生成器)和TBE(Tensor Boost Engine)双工具链支持不同层级的算子开发。AKG基于TVM DSL实现规则计算密集型算子的快速开发,而TBE提供类CUDA的底层编程能力,适合内存访问复杂的定制算子。在计算机视觉和自然语言处理等AI应用中,合理运用这两种开发模式可以显著提升模型推理性能。本文以矩阵乘法和深度可分离卷积为例,详解如何在昇腾达芬奇架构上实现算子优化,包括分块计算、内存排布、指令调度等关键技术,并分享性能调优和工程化实践的 阅读详情

相关推荐

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析

把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。

Smell_of_earth的博客 332

AI编程新范式:从代码生成到算法优化的全栈实践指南

摘要: AI编程技术正在重塑软件开发范式,显著提升效率与质量。本文系统拆解三大核心领域: 自动化代码生成:通过结构化提示工程(五要素框架)和上下文管理,AI可生成生产级代码,效率提升45%+,结合性能与安全优化实现工业级应用。 低代码/无代码开发:可视化工具(如Mendix)缩短开发周期50%-80%,需结合混合开发模式解决复杂逻辑问题,同时应对供应商锁定等挑战。

zzywxc787的博客 981

【信息科学与工程学】计算机科学与自动化——第二十四篇 编译器10——编译原理与词法分析02

链接时优化:全局DCE(579)、LTO(580)安全编译:CFI(581、586)、ASan(582)、UBSan(583)、MSan(584)、TSan(585)、CET(587)、PAC(588)、MTE(589)、SFI(590)、Wasm沙箱(591)侧信道与秘密:侧信道缓解(592)、常量时间(593)、秘密清理(594)内存安全:ASLR(595)、栈保护(596)、整数溢出检测(597)、除零检测(598)、空指针检测(599)、数组边界检查(600)至此编号达到600。

weixin_49199313的博客 195

AI编程全栈实践:从代码生成到算法优化

大型语言模型(LLM)正在重塑软件开发流程,通过自动化代码生成和算法优化显著提升工程效率。其核心技术原理是基于海量代码训练出的深度学习模型,能够理解开发意图并生成生产级代码。在工程实践中,这种技术可降低30%开发时间同时提升22%代码质量,特别适用于电商系统、企业应用等复杂业务场景。通过GitHub Copilot等工具,开发者可以快速实现线程安全处理、支付系统集成等核心功能模块。结合TVM框架还能对AI模型进行硬件级优化,实现5倍以上的推理加速。掌握提示工程和上下文管理技巧是充分发挥AI编程潜力的关键。

weixin_34239592的博客 378

【信息科学与工程学】计算机科学与自动化——第八十四篇 C++分布式软件高并发/高可用算法01

4. 提交:协调者选择提交时间戳(>所有读时间戳),两阶段提交:a) 写意图预提交到所有参与者,b) 参与者持久化后确认,c) 协调者决定提交,异步清理意图。:客户端请求发送到协调节点,协调节点根据路由转发到主分片所在节点。Span有父子关系。1. 索引文档:客户端发送PUT请求到协调节点,协调节点路由到主分片节点,主分片写入本地,然后并行复制到副本分片,等待确认后响应客户端。3. 搜索:客户端发送搜索请求到协调节点,协调节点广播到所有相关分片,每个分片执行查询,返回结果,协调节点合并、排序、分页后返回。

weixin_49199313的博客 1080

如何处理动态语言(Python / JS)的“隐形”调用链?

本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。

xianyinsuifeng的博客 412

强化学习驱动的机电系统参数辨识最优激励设计

参数辨识是构建高精度机电系统数字孪生与自适应控制的基础环节,其核心在于通过激励信号激发系统动态并反演物理参数。传统方法依赖预设波形,难以兼顾安全性、信噪比与多参数解耦需求;而基于强化学习的最优激励设计,将信号生成建模为状态感知—动作决策—奖励反馈的闭环优化过程,天然支持连续动作空间、硬约束嵌入与分阶段敏感度聚焦。该技术显著提升电感、电阻、转动惯量等关键参数的在线估计精度与鲁棒性,已成功应用于电机驱动器自整定、电池SOC/SOH在线估计及协作机器人力控带宽提升等典型工业场景。

anwenzhao0749的博客 531

如何在STM32上5分钟搞定nanopb协议传输?附完整代码示例

本文提供了在STM32微控制器上快速集成nanopb协议传输的实战指南。通过详细的步骤,从.proto文件定义、代码生成到STM32CubeIDE项目移植,帮助开发者利用nanopb这一轻量级Protocol Buffers C语言实现,在5分钟内构建高效、跨平台的嵌入式设备通信框架,并附有完整的代码示例。

jwt8token的博客 839

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 411

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 3030

AS5600磁编码器IIC通信与角度读取实战指南

本文提供了AS5600磁编码器通过IIC通信协议实现高精度角度读取的完整实战指南。详细解析了硬件连接要点、IIC通信时序、Arduino与STM32平台驱动代码,并分享了多圈测量、噪声滤波等进阶应用与避坑技巧,帮助开发者快速将这款非接触式角度传感器集成到电机控制、旋钮等项目中。

weixin_29172201的博客 243

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

1. 动手开发第一个 SAP CDS View

在开始学习前,大家需要根据这篇文章介绍的步骤,在自己本地电脑上,把 ABAP Development Tool 安装好。右键单击这个添加好的 ABAP 开发包,选择新建一个 ABAP Repository Object,类型就选择。,就可以像在 SAPGUI 里使用 SE16 那样,查看这个 CDS View 的内容。笔者下一篇文章,会详细介绍我们创建的第一个 CDS View 的每一行代码的详细含义。从本文开始,正式进入 CDS View 开发的学习。的条件,然后点击 Run 重新执行,得到结果。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1271

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

卷积码Viterbi译码算法原理及C语言实现

具体而言,卷积码的编码过程是将输入数据和编码器中的状态进行异或操作,输出码字为各个状态对应的结果。Viterbi译码算法是一种最大似然译码算法,根据接收到的含有噪声的码字,寻找出最有可能的原始数据序列。(2) 递推计算:根据接收到的码字和当前状态,计算下一时刻各个状态的路径度量,并记录每个状态的前驱状态。以上代码实现了一个简单的卷积码Viterbi译码算法,通过接收到的码字进行译码,并输出解码结果。(1) 初始化:将所有状态的路径度量初始化为一个很大的值,选择路径度量最小的状态作为起始状态。

2301_79331421的博客 826

[漏洞挖掘与防护] 03.漏洞利用之WinRAR安全缺陷复现(CVE-2018-20250)及软件自启动分析

上一篇文章将详细介绍MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程,它是Windows Server服务RPC请求缓冲区溢出漏洞,利用445端口,并通过Metasploit工具获取shell及进行深入的操作。这篇文章将详细讲解WinRAR漏洞(CVE-2018-20250),并复现了该漏洞和讲解了恶意软件自启动劫持原理。基础性文章,希望对入门的同学有帮助。

杨秀璋的专栏 1088

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 208

链接文件及功能安全:S32K3如何将FLASH驱动放到RAM里面、RAM如何实现软件复位数据不丢失操作。

在通过RTD的SDK也好MCAL也好,始终存在一个问题,生成的代码除了看门狗模块,默认都是放在flash里面,按照正常逻辑来看没啥大的问题,思考一个问题:Flash放在0x100的位置,但是此时我们要操作0x100怎么办?那肯定不允许啊,但是将flash的驱动放在RAM里面就可以避免这个问题的产生。Flash的特性:PF0能操作PF1,当然PF1也能操作PF0的,以此类推,只要不操作自身,想怎么玩都可以。这也是一个物理特性吧。

梦想技术家 2310

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

uniapp [安卓苹果App端] - 详细实现PDF预览功能在线预览PDF文档,Uniapp App端实现pdf文件预览在线预览pdf二进制文件流、本地pdf文档、PDF文件地址url路径(解决白屏

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,uniapp在线预览pdf功能,在安卓苹果app平台实现PDF的预览查看,uniappApp端实现pdf文件预览,UNIAPP在线预览PDF文档,Uniappapp在线预览pdf文件流,从后端接口里获取pdf文件如何转成链接预览,预览pdf的插件,uni-app的pdf预览功能,uniapp使用pdf.js插件预览pdf文件,预览pdf白屏没有报错,打开后没反应,打开是空白,加载PDF时发生错误,如

🏆 前端领域优质创作者 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 268

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 159

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 142

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 139

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 186
上一篇: AI 论文周报丨多模态记忆智能体/视觉基础模型/推理模型等多领域成果一键速览
下一篇: 以结构/序列/功能之间的关系重新定义蛋白质语言模型的分类:李明辰博士详解蛋白质语言模型
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值