读 ncnn 源码(Ⅰ):从 sample 到 `Net::load_param` 的完整链路
读 ncnn 源码(Ⅰ):从 sample 到 Net::load_param 的完整链路
目标:弄清 ncnn 是如何从 .param / .bin 文件构建计算图、如何适配不同输入来源(文件/内存)、以及在 Vulkan 设备存在时如何裁剪与回退。
TL;DR
squeezenet 样例的主流程:load_param(解析网络结构与超参数)→ load_model(载入权重)→ create_extractor / input / extract(执行推理)。
I/O 入口通过 DataReader 抽象统一,DataReaderFromStdio(FILE*) 只是其中一种实现。文本解析走 scan(),二进制走 read()/reference()。
Net::load_param(DataReader&) 是文本 .param 的总入口:读魔数与计数 → 逐层解析(类型、名字、bottom/top、ParamDict)→ 处理 shape hint(键30) 与 featmask(键31) → 按需 Vulkan→CPU 回退 → 更新网络输入输出。
错误策 ...
AI infra 合集
TensorRT
从 0 到 1:TensorRT-OSS 编译与上手(含 Windows 与 Linux)
ncnn
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。 ncnn 从设计之初深刻考虑手机端的部署和使用。 无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。 基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行, 开发出人工智能 APP,将 AI 带到你的指尖。 ncnn 目前已在腾讯多款应用中使用,如:QQ,Qzone,微信,天天 P 图等。Github
读 ncnn 源码笔记:从 sample 到 Net::load_param 的完整链路
读 ncnn 源码(Ⅱ):层工厂与“覆盖机制”,以及 CPU 端的指令集优选
读 ncnn 源码(Ⅲ):ParamDict 解析、featmask 按层屏蔽、词法器与 blob 索引(含解析实录)
读 ncnn 源码(Ⅳ):Convolution 基类与 x86/FMA 特化 —— 参数到算子的全链路
读 ncnn 源码(Ⅴ):Param 读取闭环——从 token 到图,再 ...
从 0 到 1:TensorRT-OSS 编译与上手(含 Windows 与 Linux)
从 0 到 1:TensorRT-OSS 编译与上手(含 Windows 与 Linux)
这篇文章记录了我在本地从源码编译 TensorRT-OSS 的完整流程,目标读者是准备二次开发插件、研究解析器(ONNX Parser)或想阅读示例代码的人。
背景简介
TensorRT-OSS 仓库包含 TensorRT 的开源组件:插件源代码、ONNX 解析器以及大量示例(samples)。这些组件是 TensorRT GA(商用发行包)的子集与扩展,便于我们调试与学习。
一、准备工作(Prerequisites)
1) 必备软件(核心)
TensorRT GA 发行包(与 OSS 匹配的版本,例如:v10.13.3.9)
CUDA(推荐:12.9 / 13.0)
cuDNN(可选) 8.9
CMake ≥ 3.31
Python 3.10–3.13、pip ≥ 19.0
基本工具:git、pkg-config、wget(Linux);Windows 需 VS 2022 + 组件(含 C++、CUDA)
备注:onnx-tensorrt、cub、protobuf 会由 T ...
AI System - 介绍
AISystem是由ZOMI的开源课程,本文是我在学习过程中的笔记。
AI 的历史与现状
AI 的领域应用
人工智能正在日益渗透到所有的技术领域,而深度学习是目前人工智能中最活跃的分支。
CV 领域应用
“计算机视觉,尤其是图像识别,是深度学习能力的一些最早重要演示的主题。”
“自动驾驶汽车使用深度学习来识别和跟踪…车辆、行人和其他物体。”
“搜索引擎…根据图像查询提供准确且相关的搜索结果。”
“机场和政府大楼使用面部识别来筛查乘客和员工。”
“已从…图片分类、目标检测和物体分割,逐渐过渡到…二维甚至三维的图片生成。”
NLP 领域应用
“深度学习与 NLP 有着密切的联系…研究如何让计算机更好地理解和处理自然语言。”
“词向量表示…更好地捕捉词语的语义信息。”
“使用 CNN/RNN 等模型,对文本进行分类或情感分析。”
“机器翻译…利用大量双语语料库进行训练,从而实现高质量的机器翻译。”
“最新的进展已经能够使用语言大模型 LLM 实现人机对话、摘要自动生成和信息检索等功能。”
Audio 领域应用
“智能音频处理…实现音频信号的分析、识别和合成等任 ...
在 Ubuntu 上编写通用脚本管理 Clash 全局代理
在 Ubuntu 上编写通用脚本管理 Clash 全局代理
在 Linux 下使用 Clash 代理时,我们通常需要手动启动 Clash 程序,并设置 http_proxy、https_proxy 等环境变量来实现全局代理。如果频繁切换代理,这样做会非常麻烦。
本文将演示如何编写一个通用脚本,一键启动或关闭 Clash,并实现全局代理切换。
1. Clash 启动命令回顾
假设 Clash 的配置文件路径为:
1~/.config/clash/config.yaml
手动启动方式为:
1clash -f ~/.config/clash/config.yaml
默认 REST API 监听在 9090 端口,代理监听在 7890 端口。
2. 编写代理控制脚本
新建一个脚本文件 proxy.sh:
1nano proxy.sh
写入以下内容:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#!/bin/b ...
openEuler WiFi 无法访问公网的排查与解决笔记
openEuler WiFi 无法访问公网的排查与解决笔记
在使用 openEuler 系统连接 WiFi 时,我遇到了 WiFi 已连接但无法访问公网 的问题。本文记录了从问题发现到解决的完整排查过程,方便未来遇到类似情况参考。
一、问题现象
在 openEuler 上使用 nmcli 查看网络状态:
1nmcli device status
输出显示:
123wlan0 wifi connected CAD330BS1usb0 ethernet connected usb0-static...
可以看到无线网卡 wlan0 已经成功连接到 WiFi(SSID:CAD330BS1),但是尝试 ping 公网:
12ping www.baidu.comping 114.114.114.114
结果均提示:
12ping: socket: Operation not permittedping: Destination Host Unreachable
二、初步诊断
普通用户权限问题
ping 报错 “Ope ...
PyTorch FractionalMaxPool3d解析
PyTorch FractionalMaxPool3d解析
函数入口
主要负责核心处理逻辑前的数据检查以及运行时类型。运行时类型靠AT_DISPATCH_FLOATING_TYPES_AND2宏实现,可展开查看。lambda表达式负责实际的逻辑执行。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768TORCH_IMPL_FUNC(fractional_max_pool3d_out_cpu)( // 核心输入张量。这是需要进行分数最大池化操作的特征图。 // 它的形状通常是 4D [C, T, H, W](通道, 时间, 高度, 宽度)或 5D [N, C, T, H, W](批次, 通道, 时间, 高度, 宽度)。 // 函数内部会首先将其转换为内存连续的 (contiguous) 版本以提高计算效率。 对应算子参数input. const at::Tensor& ...
有限元方法刚度矩阵K详细表达式推导
三维刚度矩阵K的详细推导
前置弹性力学矩阵知识
几何变换矩阵S
S=[∂∂x000∂∂y000∂∂z∂∂y∂∂x00∂∂z∂∂y∂∂z0∂∂x](1.1)\mathbf{S} =
\begin{bmatrix}
\frac{\partial}{\partial x} & 0 & 0 \\
0 & \frac{\partial}{\partial y} & 0 \\
0 & 0 & \frac{\partial}{\partial z} \\
\frac{\partial}{\partial y} & \frac{\partial}{\partial x} & 0 \\
0 & \frac{\partial}{\partial z} & \frac{\partial}{\partial y} \\
\frac{\partial}{\partial z} & 0 & \frac{\partial}{\partial x}
\end{bmatrix}\tag{1.1}
S=⎣⎢⎢⎢⎢⎢⎢⎢⎡ ...
有限元方法大纲-弹性力学
有限元方法思维导图
刚度矩阵详细推导
请看另一篇文章
该封面图片由Thiago de Paula Oliveira在Pixabay上发布
Linux系统硬盘爆了?可能是因为Docker日志文件
Linux系统硬盘爆了?可能是因为Docker日志文件
定位问题
1df -h
1234567891011121314文件系统 大小 已用 可用 已用% 挂载点overlay 3.5T 3.4T 0 100% /var/lib/docker/overlay2/e45ac69ad614de49cc50e66d404e159e86532193608da7315ca33aa776e426ab/mergedoverlay 3.5T 3.4T 0 100% /var/lib/docker/overlay2/3943e7de3bee9fa4d6df1e2dfc41d6270d11d99e79869246763033361e47e2cb/mergedoverlay 3.5T 3.4T 0 100% /var/lib/docker/overlay2/2854576b609fd3e9ea2f2ce422fdc072dc336e7 ...
LMDeploy+Open Web UI部署DeepSeek
LMDeploy部署deepseek
Miniconda安装
1234mkdir -p ~/miniconda3wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.shbash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3rm -rf ~/miniconda3/miniconda.sh
1~/miniconda3/bin/conda init bash
1source ~/.bashrc
LMDeploy下载
123conda create -n lmdeploy python=3.8 -yconda activate lmdeploypip install lmdeploy
模型准备
1.下模地址
huggingface
https://huggingface.io
魔塔社区
https://www.modelscope.cn
找到模型后赋值其名称ID即可。
2. 模 ...
Ollama+Open Web UI部署DeepSeek
前言
本文使用Docker、Ollama以及Open WebUI在Linux部署本地模型,实现web式访问大模型。
工具安装
Ollama
运行命令
1curl -fsSL https://ollama.com/install.sh | sh
Docker
1. 安装 Docker
步骤 1.1: 更新系统
在安装 Docker 之前,确保系统是最新的:
12sudo apt update sudo apt upgrade -y
步骤 1.2: 安装必要的依赖
安装一些必要的依赖包:
1sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
步骤 1.3: 添加 Docker 官方 GPG 密钥
1curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.g ...
ZeroTier One虚拟局域网实现Windows远程控制
使用 ZeroTier 搭建虚拟局域网实现 Windows 远程控制
在日常工作中,我们可能需要远程访问局域网内的 Windows 电脑,但由于设备分布在不同的网络环境中,传统的局域网远程控制方式(如 RDP)可能无法直接使用。通过 ZeroTier,我们可以轻松搭建一个虚拟局域网,将不同网络中的设备连接起来,实现远程控制。
本文将详细介绍如何使用 ZeroTier 搭建虚拟局域网,并通过 Windows 自带的远程桌面功能实现远程控制。
什么是 ZeroTier?
ZeroTier 是一款开源的虚拟局域网工具,它可以在不同的网络环境中创建一个虚拟局域网,让分布在全球的设备像在同一个局域网中一样互联互通。它的主要特点包括:
跨平台支持:支持 Windows、Linux、macOS、Android、iOS 等多种操作系统。
简单易用:无需复杂的网络配置,几分钟即可搭建虚拟局域网。
高效稳定:支持点对点连接,延迟低,性能高。
实现目标
通过 ZeroTier 搭建虚拟局域网,将两台 Windows 设备连接到同一个虚拟局域网中,并使用 Windows 自带的远程桌面功能(RD ...
Git 中清除历史记录中的大文件夹或大文件
在 Git 中清除历史记录中的大文件夹或大文件,可以通过以下步骤实现。这通常需要使用 git filter-repo 或 git filter-branch 工具。以下是推荐的方式:
方法 1:使用 git filter-repo(推荐)
git filter-repo 是一个更现代、更高效的工具,适合清理历史记录。
步骤:
安装 git filter-repo
如果尚未安装,可以通过以下方式安装:
1pip install git-filter-repo
备份当前仓库
在操作之前,建议备份当前仓库,以防误操作导致数据丢失:
1cp -r your-repo your-repo-backup
清除大文件夹
假设你要清除名为 large-folder 的文件夹:
1git filter-repo --path large-folder --invert-paths
--path 指定要操作的路径。
--invert-paths 表示删除指定路径的内容。
强制推送到远程仓库
清理完成后,需要强制推送到远程仓库以覆盖历史记录:
12bashgit pus ...
使用 Inno Setup 打包和处理单个大文件
使用 Inno Setup 打包和处理单个大文件
在软件开发和分发过程中,尤其是涉及到大文件(如模型文件、数据文件等)的场景,如何高效地打包和处理这些文件是一个常见的问题。本文将介绍如何使用 Inno Setup 打包单个大文件,并在安装过程中对其进行处理(如合并分块文件)。
为什么需要分块和合并大文件?
在某些情况下,单个大文件可能需要被拆分成多个小文件进行分发,例如:
文件大小限制:某些文件系统或传输协议对单个文件的大小有限制。
压缩优化:分块文件可以更好地利用压缩算法的优势。
安装灵活性:分块文件可以按需加载或合并,减少安装包的复杂性。
通过 Inno Setup,我们可以轻松实现以下功能:
将分块文件打包到安装包中。
在安装过程中自动合并分块文件为原始大文件。
安装完成后清理分块文件,保持安装目录整洁。
准备工作
1. 拆分大文件
在打包之前,我们需要将大文件拆分为多个分块文件。以下是一个 Python 脚本,用于将大文件拆分为指定大小的分块文件。
Python 拆分脚本
123456789101112131415161718192021222324252 ...
Git subtree使用
1. 添加子仓库地址
1git remote add SubTree-origin http://192.168.50.200:3000/330/SubTree.git
2. 使用 subtree 添加子树
1git subtree add -P SubTree SubTree-origin master --squash
注意:--squash 会把所有提交合并成一条提交,如果使用了此选项,在后续的其他命令也应使用 --squash,以保持提交记录的线性,否则可能会出现分支落后的问题。
3. 从子仓库拉取更新
当子仓库有新的提交时,可以使用以下命令将最新的更改拉取到主仓库中:
1git subtree pull -P SubTree SubTree-origin master --squash
说明:
git subtree pull:从指定的远程仓库拉取子树的更新。
-P SubTree:指定子树的路径。
SubTree-origin:远程子仓库的名称。
master:子仓库的目标分支。
--squash:将所有拉取的提交压缩成一个提交,以保持主仓库的提交历史简 ...















