【大模型换机器部署失败原因排查】一次 `Illegal instruction` 排查:原来是虚拟机没暴露 AVX 指令集

ubuntu16.04解决tensorflow提示未编译使用SSE3、SSE4.1、SSE4.2、AVX、AVX2、FMA的问题 在我的机器上出现的提示信息如下所示: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU 阅读详情

​ 昨天在重新构建服务时,遇到了一个非常“底层”的问题。最开始看日志,还以为是业务代码、依赖或者容器环境的问题,结果一路排查下去,最后发现问题根本不在 Python,而在虚拟机 CPU 指令集。

​ 这篇文章就完整记录一下这次排查过程。

一、问题描述

1.1 部署失败

​ 重新构建后,其中一个节点启动失败。日志如下:

+ python main.py log.yml 5000

/usr/local/lib/python3.10/site-packages/polars/_cpu_check.py:259: RuntimeWarning: Missing required CPU features.

The following required CPU features were not detected:
    avx, avx2, fma, bmi1, bmi2, lzcnt, pclmulqdq, movbe

Continuing to use this version of Polars on this processor will likely result in a crash.

Install the `polars-lts-cpu` package instead of `polars` to run Polars with better compatibility.

./web_entrypoint.sh: line 4: 39 Illegal instruction (core dumped) python main.py log.yml 5000

​ 可以看到其中的关键错误:

Illegal instruction (core dumped)

​ 以及:

Missing required CPU features:
avx, avx2, fma ...

1.2 排查第一步:是不是 polars 崩了?

​ 因为日志已经给了非常明显的提示:

Install the `polars-lts-cpu` package instead of `polars`

​ 因为 polars 默认会使用 AVX / AVX2 等现代 CPU 指令集优化 ,如果 CPU 不支持这些指令,在加载动态库时就可能直接触发:

SIGILL(Illegal Instruction)

​ 也就是说,Python 代码甚至还没真正开始执行,进程就已经被 CPU 杀掉了。

1.3 为什么只有一个节点出问题?

​ 这里有个关键现象:不是所有节点都失败,只有其中一个节点失败。

​ 这说明镜像本身没问题,requirements 没问题 ,代码没问题 ,只有某一台机器环境特殊。

​ 于是我开始怀疑是不是这个节点的 CPU 指令集不对?

二、检查 CPU 指令集

​ 先登录到失败的节点:

ssh xxx@xxx.xxx.xxx.xxx

2.1 通过/proc/cpuinfo查看指令集

​ /proc/cpuinfo是 Linux 下的一个虚拟文件,可以使用cat查看:

cat /proc/cpuinfo

​ 里面包含CPU型号、核心数、cache、flags(支持的CPU指令集)。

​ 这里的flags非常重要,例如:

flags : fpu vme de pse tsc ... avx avx2 fma bmi1 bmi2

​ 因为很多深度学习框架:PyTorch、TensorFlow、ONNX Runtime 、llama.cpp 、vLLM都会检测这些 CPU 指令集。

2.2 通过正则提取目标指令集

​ 从 Linux 的 CPU 信息中,提取当前 CPU 支持的一些关键指令集特性(如 AVX、FMA 等),并去重输出。主要用于检查 CPU 是否支持 AVX:

grep -m1 -oE 'avx[0-9]*|fma|bmi[0-9]*|lzcnt|pclmulqdq|movbe' /proc/cpuinfo | sort -u

​ 正常情况下应该看到:

avx
avx2
fma
bmi1
bmi2
...

​ 结果我运行后得到了一个空输出,这就非常异常了。

三、继续排查:CPU 型号是什么?

​ 通过model name查看当前系统识别的CPU型号信息:

grep -m1 "model name" /proc/cpuinfo

3.1 正常输出

​ 正常情况下,如果是在物理机器上,通常会看到类似:

model name      : Intel(R) Xeon(R) Gold 6230R CPU @ 2.10GHz
字段含义
Intel®Intel 处理器
XeonIntel 服务器级 CPU 产品线
GoldXeon 的中高端等级
6230R具体型号
2.10GHz基础主频

3.2 问题输出

QEMU Virtual CPU version 2.5+

​ 说明当前环境并不是真实物理 CPU,而是运行在 QEMU 虚拟化环境中。

(1) QEMU是什么

​ QEMU 是一个开源的虚拟机 、硬件模拟器 、CPU 模拟器。

​ 它可以模拟不同 CPU 架构、创建虚拟机、提供隔离运行环境。

​ 很多场景都会使用 QEMU: 云服务器、Docker底层虚拟化、KVM、CI/CD环境、模型沙箱、安全隔离环境。

在这里插入图片描述

​ 这张图用堆叠的方式呈现了从硬件到应用的四层抽象:底层物理 CPU 是唯一真实的算力来源,QEMU/KVM 在其上构造出"假装是CPU"的虚拟硬件,Linux 虚拟机把这套假硬件当真硬件来跑内核,最上层你的程序则完全感知不到自己其实活在第三层之上。层与层之间的箭头方向也提示了一个关键事实,上层的每条指令最终都要落到最底层的物理 CPU 上执行。

四、问题根源:QEMU 使用了通用 CPU 模型

​ 通过上述CPU型号的输出说明当前虚拟机并没有直接暴露宿主机 CPU。而是使用了qemu64。

​ 这种模式的特点是兼容性高、迁移方便、但会屏蔽 AVX / AVX2 等高级指令集。

​ 因此,即使物理机实际上支持 AVX,虚拟机里也完全看不到。

4.1 为什么会突然这样?

​ 后来同事提到这台机器之前做过一次迁移,这就完全对上了。

​ 因为很多虚拟化平台在 VM 迁移时,会默认把 CPU 模型降级成qemu64,目的就是保证 VM 可以迁移到不同 CPU 型号的宿主机上。

​ 代价则是AVX / AVX2 / FMA 等高级指令全部被隐藏。

4.2 为什么 polars 会直接崩?

​ 因为 polars 的默认构建会开启 AVX 优化,动态库内部直接使用 AVX 指令。而当前 VM根本不支持 AVX,于是 CPU 在执行指令时直接触发:

SIGILL
Illegal instruction

​ 进程被系统杀掉。

五、解决方案—修改虚拟机 CPU 模式(推荐)

这是根治方案。

5.1 KVM / libvirt

​ 修改 VM 配置:

<cpu mode='host-passthrough' check='none'/>

​ 或者:

<cpu mode='host-model'/>

​ 让 VM 直接透传宿主机 CPU 指令集。

5.2 QEMU

​ 启动参数改成:

-cpu host

​ 而不是:

-cpu qemu64

5.3 修改后一定要:

power-cycle(关机再开)

​ 不能只是 reboot,因为 CPU 特性是在 VM 启动时协商的。

六、这类问题为什么容易误判?

​ 因为表面现象非常像:Python 崩溃 /Docker 问题/依赖问题/C 扩展问题 。但实际上是 CPU 指令集问题。

​ 尤其是Illegal instruction这个错误。很多人第一反应是代码有 bug。实际上确是CPU 不认识这个指令。

七、以后再遇到 Illegal instruction 怎么排查?

7.1 Step1:先确认 CPU 支持哪些指令集

​ 第一件事,不是重装环境。而是先确认当前机器到底有没有 AVX / AVX2 / FMA?

cat /proc/cpuinfo

​ 或者:

lscpu

​ 重点看flags部分,例如:

flags : ... sse4_2 avx avx2 fma ...

​ 这里 avx、 avx2 、 fma 代表 CPU 支持对应 SIMD 指令。

​ 如果没有avx但你的程序用了 AVX 指令,那么一定会发生这个问题。

7.2 Step2:确认是不是运行在虚拟机里

​ 有时候物理机支持 AVX2,但虚拟机不支持。

​ 继续查看:

grep -m1 "model name" /proc/cpuinfo

​ 如果看到:

QEMU Virtual CPU

​ 或者:

Common KVM processor
Virtual CPU

​ 基本说明你运行在虚拟化环境中。

​ 这里要开始思考一个关键问题:虚拟机暴露的CPU kennel不是宿主机真实的CPU。也就是说宿主机可能是 Xeon Gold,但 VM 里看到的是“精简版 CPU” 。

​ 虚拟化平台为了做热迁移、保证兼容、统一集群,通常不会把全部 CPU 指令暴露给 Guest。于是就会出现这个问题,这也是很多线上问题最容易忽略的一点。

7.3 Step3:思考“是不是迁移导致的”

​ 如果以前能跑、迁移后跑不动,或者换了节点之后偶发失败,第一反应应该是怀疑 CPU model 被悄悄降级了。

很多虚拟化平台和云厂商,为了让虚拟机能在不同物理机之间自由迁移,会统一各台宿主机暴露给 VM 的 CPU能力取交集,砍掉高级指令集。          

在这里插入图片描述

  • 举个最常见的场景:
    • Host A: AVX2 + FMA

    • Host B: 仅 AVX

      为了让虚拟机能在 A、B 之间随便漂移,平台干脆只对 VM 暴露 AVX。于是同一份程序、同一套环境、同一个镜像,昨天在 A上跑得好好的,今天到 B 上就 illegal instruction 了。

​ 本质上,变的不是你的代码,而是 VM 看到的 CPU 能力。 这一步特别值得强调,是因为大多数人遇到这种问题的第一反应都是去折腾用户态——重装 Python、重装 CUDA、重新编译PyTorch、换镜像版本,折腾一圈发现毫无效果。因为问题根本不在那一层:上面所有东西一个字节都没变,是底下那块"虚拟CPU"被换了。

​ 所以排查顺序应该反过来:先用 cat /proc/cpuinfo | grep flags 对比迁移前后的指令集差异,确认 CPU 能力是否一致,再去怀疑用户态。

7.4 Step4:确认是不是 SIMD 优化库触发的

​ 很多现代科学计算库为了性能,会默认启用SIMD、向量化、CPU 特化优化 。常见的"重灾区"包括:

  • numpy(尤其是带 MKL 的版本)
  • polars、pyarrow
  • pytorch、tensorflow、jax

​ 这些库的典型行为是运行时动态探测 CPU 能力,再挑一份最快的 kernel。检测到 AVX2 就走 AVX2 内核,检测到 AVX-512 就走AVX-512 内核。这套机制在裸机上工作得很好,但一旦放进虚拟机,就有几个地方会出岔子:

  • 检测逻辑误判:库读到的 CPU flags 和 VM 实际能执行的指令对不上
  • Guest 和 Host 信息不一致:VM 宣称支持 AVX2,但底下的 vCPU 模型其实砍掉了
  • wheel 编译目标过高:预编译包是在带 AVX-512 的机器上用 -mavx2 -mfma 打的,强制要求运行环境也具备这些指令
程序加载 AVX2 指令
↓
CPU 实际不支持
↓
Illegal instruction

​ 这类问题最容易在一个场景下中招:pip install 装预编译 wheel。 因为PyPI 上很多包提供的是别人在高配机器上用 -mavx2 -mfma 甚至 -mavx512f 编出来的 wheel,整段二进制里都是硬编码的高级指令,它不做运行时探测,也没有降级路径,假设你的 CPU一定支持。一旦运行环境是个砍过指令集的 VM,程序连 import 都过不去就直接崩。

​ 排查思路也很直接:

  • 用python -c "import numpy; numpy.show_config()" 看看链接的是哪份后端
  • 怀疑是 wheel 问题时,加 --no-binary :all: 强制从源码本地编译,让编译器以当前 CPU为目标
  • 或者直接装"通用版本"(如 numpy 不带 MKL 的纯 OpenBLAS 构建),牺牲一点性能换可移植性

八、总结

​ 这次问题本质上不是Python问题,也不是Docker问题,而是VM 迁移后,CPU 模型退化成了 qemu64,导致 AVX 指令集被隐藏。最终导致polars 加载动态库时触发 SIGILL。

​ 这种问题非常“底层”,但在 AI / 数据处理场景里会越来越常见。因为现在很多高性能库默认都假设 CPU 至少支持 AVX,所以以后看到:

Illegal instruction (core dumped)

​ 不要只盯着代码,也要记得看看/proc/cpuinfo。

出现 to use the following CPU instructions in performance-critical operations: AVX2 解决方法 TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriat 阅读详情

相关推荐

douyin-favorite-MyLike-main.zip

douyin-favorite-MyLike-main.zip

避开MindsDB开发陷阱:开发者必知的20个核心问题与解决方案

MindsDB作为一款轻量级分布式数据库管理系统,在实际开发中常遇到各类技术难题。本文汇总开发者高频踩坑点,结合官方文档与源码解析,提供系统化解决方案。从环境配置到预测模型部署,覆盖20个关键问题,附具体操作示例与模块路径指引。 ## 环境部署与依赖管理 ### CPU特性缺失警告 启动MindsDB时若出现"Missing required CPU features"警告,通常因polars...

gitblog_00676的博客 494

风光储虚拟同步VSG并离网切换预同步控制仿真(Simulink仿真实现)

内容概要:本文针对风光储混合微电网系统,深入研究了虚拟同步发电机(VSG)技术在并网与离网两种运行模式间进行切换时的关键控制策略——预同步控制,并基于Simulink平台构建了完整的系统仿真模型以验证该策略的有效性。该模型集成了风力发电、光伏发电和储能系统,通过VSG控制算法赋予电力电子逆变器类似于传统同步发电机的惯性和阻尼特性,从而显著增强了微电网在模式切换过程中的动态稳定性与鲁棒性。其中,预同步控制环节是实现无缝切换的核心,它通过实时调节VSG输出电压的频率、相位和幅值,使其在并网开关动作前就与主电网的电压参数达到高度一致,有效消除了并网冲击电流,实现了平滑、无扰动的模式转换。通过仿真结果,可以系统地分析和优化控制器的各项参数,进而验证该整体控制方案的技术可行性与优越性能。; 适合人群:具备电力电子技术、自动控制理论和电力系统基础的专业知识,从事新能源发电、微电网运行与控制、电力系统自动化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究风光储一体化混合微电网的能量管理策略与并离网无缝切换控制技术;②深入学习和掌握虚拟同步机(VSG)的工作原理、数学建模及其在逆变器控制中的具体实现方法;③利用Simulink进行复杂的电力系统动态仿真,以验证和评估新型控制算法的动态响应特性和有效性。; 阅读建议:此资源以Simulink仿真为核心实践工具,使用者应紧密结合电力系统的基础理论知识,深入理解VSG的数学模型和控制逻辑,尤其要重点关注预同步环节的控制策略设计,并通过反复调整仿真模型中的各项参数来观察系统的动态响应变化,从而深化对微电网稳定运行机制和高级控制技术的理解。

解决‘Illegal instruction’:CPU指令集不兼容处理

在边缘设备部署AI模型时,因CPU不支持AVX等高级指令常导致"Illegal instruction"崩溃。通过Miniconda结合conda-forge与noavx构建,可精准控制依赖的二进制兼容性,避开硬件冲突。利用环境隔离、平台降级和精确的environment.yml管理,实现跨架构稳定运行,提升生产环境的可复现性与可靠性。

weixin_42522857的博客 733

【顶级EI复现】新扩展移相角下的双有源桥DC-DC 变换器优化控制策略(Simulink仿真实现)

内容概要:本文聚焦于“新扩展移相角下的双有源桥DC-DC变换器优化控制策略”的研究与仿真实现,基于Simulink平台系统地构建了完整的仿真模型,深入探讨了软开关实现、最小电流应力优化及闭环控制策略的设计方法。文章提出一种改进型扩展移相(EPS)调制策略,通过引入扩展移相角有效拓宽软开关范围,提升变换效率并降低功率器件的电压与电流应力。结合KKT最优性条件与分段解析优化理论,实现了软开关与最小应力的协同控制目标,并设计双闭环控制系统以增强动态响应与鲁棒性。研究成果成功复现了高水平EI期刊论文的核心思想,具有较强的学术参考价值与工程应用意义。; 适合人群:电力电子、电气工程及其自动化等方向的研究生、科研人员,以及具备一定Simulink建模能力与电力电子拓扑控制基础的工程技术人员。; 使用场景及目标:①深入理解双有源桥(DAB)变换器的工作机理与先进控制策略;②掌握基于KKT条件的优化控制建模方法;③在Simulink中复现并验证EI级论文提出的控制算法,服务于科研论文撰写、课题研究或实际项目开发; 阅读建议:建议结合文中涉及的EPS调制、软开关条件推导、KKT优化数学建模等内容进行系统学习,重点关注仿真模块的参数设置、控制逻辑实现与波形分析,以全面掌握该优化策略的技术细节与工程实现路径。

新手也能搞定的ANPC三电平逆变器Simulink仿真:从SPWM调制到开关损耗优化

本文详细介绍了如何在Simulink中搭建ANPC三电平逆变器仿真模型,从SPWM调制基础到开关损耗优化技巧。通过分层设计思路和实用代码示例,帮助新手快速掌握ANPC拓扑的核心功能,包括中点平衡控制和性能指标分析,为电力电子系统设计提供实践指导。

weixin_30335575的博客 405

kvm迁移镜像启动报错(the CPU is incompatible with host CPU: Host CPU does not provide required features: fma)

这是因为两台宿主机的CPU类型不一致导致的,解决方法也很简单,将xml文件中的CPU类型改为与当前宿主机一致即可。(可以自己创建一个新的虚拟机,看配置文件取替换最为保险)1. 查看当前宿主机的CPU类型。2. 修改xml文件的CPU类型。3. 重新注册并启动虚拟机。

墨痕诉清风的博客 5434

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

报错:CPU指令集的问题

我使用的超算平台是基于AMD自研的CPU,不支持-xHost,而我的icon是通过ifort编译的,只用了-xHost,因此不兼容。如果再到AMD平台编译软件,而且使用的ifort,可以使用-march=core-avx2提高兼容性。优点:生成的可执行文件可以在所有支持AVX2的CPU上运行,提供了更好的可移植性。缺点:生成的可执行文件可能无法在不同架构的CPU上运行,或运行效率降低。它会自动检测当前编译机器的CPU,并为该特定CPU生成最优化的代码。优点:可以充分利用编译机器CPU的所有特性。

锐多宝的地理空间 1503

宇树G1嵌入式软件架构及技术实现

该架构通过硬件加速(FPGA)+确定性调度(RTX5)的组合,在1ms控制周期内完成从传感器采集到43轴输出的全链路处理,相比波士顿动力系统缩短40%的着地稳定时间。,结合ARM Cortex-R5与FPGA的异构计算能力,实现43自由度1kHz实时控制。

m0_60674045的博客 4310

WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

文件传输助手为什么会出现,是因为项目上有些特殊的地方限制太多了,连插硬盘都需要关软件,联网又要开很不方便,网络限制一般软件只能局域网通信,还要开特定的端口等,你才能在电脑上通信,这样和机房的服务器远程的时候文件就不好拿过去,又不可能每次都去开机房的门。现在这个功能比较简单,只能单文件发送,但是其实比U盘硬盘方便,一般的六类网线传输压缩包在50M/s以上,U盘硬盘复制就不行了,特别如果是像我们学校这种网络结构,一个学校都在一个局域网,那真的方便!普通的局域网用特定IP和端口,通信也是很方便的。

m0_69233031的博客 1669

VMware虚拟机cpu不支持avx指令集处理

原创作者:运维工程师 谢晋。

杭州吉网-运维日记 1万+

思博伦Spirent TestCenter创建单播流uni-stream

Traffic Generator列表中会出现刚才创建的uni-stream,创建完成。通常测试情况下,主要对Ethenet II和IPv4 Header进行配置。(通常情况下,如果流配置比较规范,选择任意端口接收,也没问题。编辑uni-stream基本信息。配置本条流由STC哪个端口接收。

辗转反测的博客 1680

【FusionCompute】创建虚拟机失败(六)

一、实验预告 前面已经将CNA主机添加到了VRM管理节点中,并基于FreeNAS部署了虚拟存储。接下来在CNA主机中创建主机。最终,在VMware Workstation软件中,在已经搭建好的FusionCompute的环境中,在CNA主机中,创建虚拟机失败。 查其原因,可能是FusionCompute不支持虚拟化嵌套。亦或是自己本地环境不满足此次实验的要求。但还是记录一下自己的实验过程和心得体会。 参考链接: 【FusionCompute】添加CNA主机到VRM管理节点(四)_xybDIY的博客-CS

宝耶需努力的技术分享博客 4759

【WRF工具】WRF 模型输出可视化工具 plotfmt

【WRF工具】WRF 模型输出可视化工具 plotfmt

WW、forever的博客 1289

【软件系统架构】系列十一:面向对象技术—sysML

摘要: SysML(系统建模语言)是UML的扩展,专为复杂系统工程设计,支持硬件、软件、人员等跨领域建模。其核心包括9种图:4种结构图(如块定义图BDD、内部块图IBD)、4种行为图(如活动图AD、序列图SD)和需求图(REQ),覆盖需求、结构、行为及参数约束。相比UML(面向软件),SysML精简图表(9 vs 13),强化需求追踪与性能分析(如参数图PD),并支持MBSE(基于模型的系统工程)。需求关系(如满足、验证、派生)在需求图中明确关联设计实现,形成闭环管理。SysML是UML的子集与系统工程扩展

moton2017的博客 1904

OpenCore-Legacy-Patcher CPU优化:AVX指令集缺失的解决方案

你是否还在为2007-2011年的老款Mac无法运行新版macOS而烦恼?当苹果宣布停止对老设备的技术支持时,无数用户面临着硬件被淘汰的困境。特别是那些搭载Penryn、Nehalem、Sandy Bridge等早期Intel处理器的Mac设备,由于缺乏AVX(Advanced Vector Extensions,高级向量扩展)指令集支持,在新版macOS上根本无法启动或运行。 **读完本文,你...

gitblog_00292的博客 717

Java小白入门200例81之Java接口

作者简介 作者名:编程界明世隐 简介:优快云博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞! 引言 很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢? 其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大

编程界明世隐的博客 1358

【illegal instruction解决】

1、 调用了别人编译的第三方库so,集成到自己的程序中编译没有任何问题,运行程序会报错illegal instruction,并产生core文件。2、 在一台机器上编译好的可执行文件,放到相同架构相同系统的机器上跑会报illegal instruction错误所谓 Illegal instruction (错误指令),表示处理器(CPU)收到了一条它不支持的指令大多数情况下,是因为程序采用了特定的优化编译,需要依赖一定(新型)的CPU指令集。

weixin_46617612的博客 7831

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

kvm迁移镜像启动报错

背景说明: 将一台kvm宿主机上的镜像,迁移到另外一台宿主机,启动时报错: virsh start mycentos error: Failed to start domain mycentos error: the CPU is incompatible with host CPU: Host CPU does not provide required features: fma, x2apic, movbe, aes, fsgsbase, bmi1, avx2, smep, bmi2, erms, in

低调说 898

温度PID控制PLC程序

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

去除警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

去除警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA一、警告原因分析1、出现警告2、原因分析二、去除警告方法1、安装的Tensorflow是GPU版本(tensorflow-gpu)2、安装的tensorflow是CPU版本(tensorflow)三、材料补...

求真、务实 1011

彻底解决llama.cpp编译难题:AVX2指令集适配与常量正确性深度修复

你是否在编译llama.cpp时遇到过"非法指令"崩溃或"const qualifier"编译错误?本文将从硬件指令集适配到代码常量正确性处理,提供一套完整的问题解决方案,让你顺利编译运行这个高性能的LLaMA模型C/C++移植项目。 ## 编译问题诊断全景图 llama.cpp作为Facebook LLaMA模型的C/C++移植版本,以其高效性能著称,但编译过程中常因硬件兼容性和代码规范问题...

gitblog_00362的博客 918

CPU指令集不同导致的core分析

最近程序需要支持CGSL系统运行,测试中发现相同操作系统的两台机器,编译机运行正常,测试机coredump。core信息汇总如下,可以看出是由于测试机不支持编译后的指令导致的问题: Program terminated with signal 4, Illegal instruction. 0x00007fad269ac973 <+435>: add ...

dnet30833的博客 1454
上一篇: HuggingFace环境兼容性踩坑(Mac 用户必看)
下一篇: 【find的用法】macOS/Linux 下高效查找文件
未收敛
博客等级 码龄11年 3303粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值