- 博客(578)
- 资源 (46)
- 收藏
- 关注
原创 通义Qwen实战(2): vllm框架部署实战
通义千问推荐我们使用vllm推理框架,这是国外开源的针对大模型的推理框架。它区别于直接使用huggingface 或者modescope 调用大模型的代码,使用vllm推理时它的速度会更快,并且显存的时候会下降。它会对模型进行结构化的优化,使得推理时耗费更低的显存和算力。因此,通常大模型的在线服务,不会直接使用huggingface 或modescope提供的api, 而是把底层的transformer模型交给专业的推理框架。vllm 推理框架的官网地址:(1) 通过使用。
2025-03-27 21:41:25
79
原创 通义Qwen实战(1): 环境安装及微调实战
在github上的代码,下载到本地。案例1(1)加载model 和分词器Tokenizegithub 上的qwen源码,它默认是支持下载的模型,虽然它把训练好的模型同时支持huggingface和modescope。如果使用的是transformers 这个库导入模型加载器和分词器,那么它是从huggingface下载的,它会很卡甚至超时。
2025-03-16 18:26:36
64
原创 VLM-E2E(1): Senna论文解读
端到端自动驾驶在大规模数据的支持下展现了强大的规划能力,但在复杂和罕见场景中仍因常识有限而表现不佳。相比之下,大规模视觉-语言模型(LVLMs)在场景理解和推理方面表现出色。未来的发展方向在于结合这两种方法的优势。以往使用 LVLMs 预测轨迹或控制信号的方法效果欠佳,因为 LVLMs 并不擅长精确的数值预测。本文提出了Senna,一种将 LVLM(Senna-VLM)与端到端模型(Senna-E2E)结合的自动驾驶系统。。Senna-VLM 采用多图像编码方法和多视角提示,以实现高效的场景理解。
2025-03-12 18:36:29
55
原创 Lora模型微调(2):代码实战
其中lora_layer 对象是LoraLayer实例化得到,它需要传入原先的layer,以及该layer对应的输入和输出的channel,以及秩数r 和加权因子alpha。在推理的时候,如果继续保留这样的Lora层,会发现推理的算力是增加的。通过以上代码,就完成了将模型中w_k,w_q,w_v层的Linear层实现替换为经过Lora封装的lora_layer的实现。,可以封装任意需要Lora作用的层,只需要传入原来的层raw_linear即可,可以即插即用,使用非常方便。
2025-03-09 17:37:33
74
原创 OmniDrive(2):环境搭建
项目中使用的是全量的数据集(full dataset v1.0), 数据量比较大,训练验证(trainval) + test 总计200多G的数据,单独一个个下载会比较慢。参数,否则安装的时候会自动卸载已安装好的torch,重新安装最新版本的torch,这是不允许的。在cuDNN官网下载,默认下载的是最新版本的cuDNN,我们这里点击。,== 博文中详细介绍了完整的cuda和cudnn的安装过程==分析: 这是因为yapf 安装的版本不对,需要安装特定的版本。出现训练的loss变化,就说明可以正常训练了。
2025-03-08 17:10:42
64
原创 OmniDrive(1): 论文解读
papers: OmniDrive: LLM-Agent for Autonomous Driving with 3D Perception, Reasoning and Planninggithub: https://github.com/NVlabs/OmniDrive近年来,多模态大语言模型(MLLMs)[1,24,31] 的快速发展及其卓越的推理能力,推动了端到端自动驾驶 [6,39,46,52,58] 领域的一系列应用。然而,将其能力从二维理解扩展到复杂的三维空间是一个关键挑战,只有克服这
2025-03-08 17:09:12
75
原创 手写LLM(2): 模型训练及代码详解
比如左边输入的是问题,右边对应生成答案。给出标题,在输入的时候,会将输入拼接为< <|im_start|>user>虞美人·曲阑深处重相见虞美人·曲阑深处重相见<|im_end|><|im_start|>assistant, 然后模型就会输出对应标题的诗词,直到遇到停止的token就会结束。openai在发明chatgpt的时候,它将encoder层去掉了,只保留了右边decoder部分, 它是一个decoder-only的模型,它不依赖于标注数据,是一个自回归的模型,利用网上的海量数据进行训练。
2025-03-08 16:35:48
343
原创 手写llm(1):实现BPE Tokenizer
以通义千问为例说明,来介绍LLM大模型中Tokenizer的使用。messages,在通义千问实现问答的时候,可以看到会使用tokenizer,通过加载预训练好的tokernizer权重来创建tokenizer对象,通常tokenizer是跟模型配对的,不同模型对应不同的分词器。通过向tokenizer 中传入一段文本text, 然后会返回一段分词后的id, 这些数字id对应这段text中的一个个单词。接着这些id对应为。
2025-03-08 16:34:52
45
原创 Lora模型微调(1): 原理讲解
参数高效微调(Parameter-Efficient Fine-Tuning,PEFT) 是一种在深度学习模型微调过程中,通过仅更新少量参数来适应新任务的技术。这种方法在保持模型性能的同时,显著减少了计算资源和存储需求,特别适用于大模型(如 GPT、BERT 等)的微调场景。Lora技术是为了规避大模型在反向传播时,显存资源及算力的消耗。它通过将一个大矩阵WWW, 分解为两个小矩阵WAW_AWA和WBW_BWB表示,通过定义秩数rrr来控制参数量,并且满足WA×W。
2025-03-08 16:24:05
293
原创 python 变量类型注释
为什么使用类型注释?可读性:类型注释可以让代码的意图更加明确。开发人员可以一眼看出一个变量或函数的预期类型。静态分析:工具如 mypy 可以静态分析 Python 代码,检查类型错误,帮助及早发现潜在的 bug。IDE 支持:许多现代 IDE(如 VSCode、PyCharm)会利用类型注释提供代码补全、错误提示等功能。文档生成:类型注释可以用来生成文档,帮助其他开发者理解代码的使用。Python 类型注释使得代码更加清晰和易于理解,能够提高代码的质量和可维护性。
2025-02-19 23:23:22
794
原创 md5sum的使用及高级使用详解
md5sum 是一个轻量级、高效的工具,广泛用于文件完整性校验。高级用法结合等命令,可以更灵活地处理批量文件。为更高的安全性需求,可使用sha256sum或其他替代工具。
2025-01-10 19:05:08
1312
原创 使用osmnx生成sdmap数据
OSMnx 是一个强大的 Python 库,用于从 [OpenStreetMap (OSM)](https://www.openstreetmap.org/) 下载地理空间数据并进行图形化分析。它支持自动从 OSM 获取和分析道路网络、建筑物、兴趣点 (POIs) 等数据,并且可以与 NetworkX 无缝集成。
2025-01-10 18:31:16
149
原创 python del的使用详解
del 用于删除变量、列表元素、字典项、对象属性等。在使用 del 删除元素时,确保索引或键存在,避免引发异常。del 是用来显式删除对象的,但并不立即释放内存,内存管理依赖于垃圾回收。
2025-01-07 15:01:42
715
原创 onnx graph surgeon 的使用详解
更加方便的添加/修改onnx节点更加方便的修改子图更加方便的替换算子底层使用的是onnx.helper, 在onnx.helper的基础上进行了封装安装(1) 修改onnx- 合并算子可以看到左边的onnx的节点有输入, 很明显min,max可以同时合并为一个算子clip。在tensorRT进行层融合之前,我们可以先做onnx上的优化,使用onnx graph surgeon 来修改节点,可以得到右边合并算子之后的onnx。(2) 简化LayerNorm。
2024-12-15 18:28:33
222
原创 pdb调试器详解
pdb 是 Python 内置的交互式调试工具,可以帮助开发者逐步调试代码、查看变量、分析问题。pdb 是一个强大的调试工具,通过熟练使用断点、单步执行、调用栈分析等功能,可以帮助快速定位和解决问题。如果程序抛出了异常,可以用 bt 命令查看是在哪一层函数中出现了问题,从而快速定位问题。如果程序包含多层函数调用,bt 可以帮助明确每一层函数调用的顺序,以及当前所处的位置。运行 Python 脚本时,加上 -m pdb,会在发生异常时自动进入调试模式。程序会在脚本的第一行暂停,可以逐步执行代码。
2024-12-14 22:31:11
1444
原创 onnx算子的注册详解及案例 (完整版)
在对swim-transformer导出onnx时,尽管我们已经安装官方文档将需要的库的安装好了,但在导出onnx时会发生下列的问题提示, 错误提示opset9不支持,但我们自然就想到通过提升opset版本,比如提升到12,13。结果发现导出onnx还是会报错从代码中发现我们有一个torch.roll算子,在onnx官方文档中发现onnx暂时是不支持该算子的导出的。return x# PyTorch的推理# onnxruntime的推理。
2024-12-14 20:24:29
353
原创 将欧拉角转换为旋转矩阵
在计算机视觉、机器人学和3D图形学中,欧拉角描述了物体在三维空间中的旋转,可以用三个角度依次描述物体绕。这三个角有常用的命名约定,不同领域可能会使用不同术语。的旋转角度,分别对应Roll,Pitch,Yaw三个角。的旋转角度,分别对应三个独立旋转矩阵。欧拉角通常指沿着固定轴。
2024-11-28 09:58:13
542
原创 Dataset 和 Dataloader 详解
(1)处理变长序列如果一个批次的数据具有不同长度,例如 NLP 中的句子或时间序列,默认的 collate_fn 会报错。需要自定义逻辑,使用 填充(padding) 或其他方法统一长度(2)支持复杂数据结构默认的 default_collate 无法处理某些类型的数据,例如自定义嵌套数据或稀疏数据,需要编写自定义逻辑。(3)特殊预处理在将数据输入模型前,可能需要动态调整或预处理(例如数据增强、归一化等)。
2024-11-24 17:46:35
2996
原创 torch.mm、torch.bmm、torch.matmul
torch.matmul 是更通用的矩阵乘法操作,它支持多维张量,并能够自动广播。适用场景: 当需要对多个矩阵进行批量乘法时使用。根据输入维度和操作需求,选择合适的矩阵乘法函数!,即一批二维矩阵之间的矩阵乘法。
2024-11-22 15:52:58
509
原创 Dropout 和 BatchNorm 在训练和验证中的差异
在验证或推理阶段,必须调用 model.eval(),否则 Dropout 和 BatchNorm 的行为会与训练阶段一致,导致验证结果或推理结果不正确。如果模型中没有 Dropout 或 BatchNorm,则 model.eval() 不会改变模型的行为。
2024-11-17 00:02:09
1021
原创 模型推理: model.eval()和torch.no_grad()的使用说明
两者需要配合使用:model.eval() 确保模型行为正确,with torch.no_grad() 提高推理效率。如果只使用 model.eval() 而没有 with torch.no_grad(),会导致不必要的梯度计算,增加内存和时间开销。如果只使用 with torch.no_grad() 而没有 model.eval(),模型行为可能仍然是训练模式,导致结果不正确。因此,在推理代码中,建议始终按照以下顺序model.eval() # 确保模型行为正确。
2024-11-16 17:51:20
603
原创 利用grid sample优化BevDet
input:输入的特征图,形状为。grid:形状为的网格张量,对应为采样的归一化坐标。这是一个浮点数张量,其中每个位置存储目标输出的采样点。grid 的最后一维表示目标位置的 (x, y) 坐标,范围在 [-1, 1] 之间。mode:插值模式,通常是 bilinear 或 nearest。bilinear:双线性插值(默认值)。nearest:最近邻插值。padding_mode:处理超出边界的模式,zeros, border, reflection。
2024-10-20 20:46:47
523
原创 tensor.new_zeros 和 tensor.new_tensor
tensor.new_zeros 和 tensor.new_tensor 都用来创建一个新的tensor,。
2024-10-20 14:48:22
669
原创 types.MethodType
types.MethodType 是 Python 中的一个内置函数,它用于,使其成为该对象的方法。这在时非常有用。
2024-10-13 18:37:14
311
原创 setup.py详解 及 pip install用法
使用 setup() 函数定义包的基本信息,如名称版本、作者、许可证等。# 读取 requirements.txtsetup(install_requires=install_requires, # 指定项目运行所需的依赖列表],(1) 基本的信息说明name: 指定包的名字, 如mmdet3dversion: 指定包的版本, 如’0.1’author和: 指定作者及邮箱 (可选参数,可填可不填): 对包的简短的描述信息: 一般直接显示README.md。
2024-09-22 22:18:23
804
原创 bev pool 原理及代码讲解
个视锥点对应的3d坐标(voxel/bev坐标系), 其中Nprime = B x N x D x H x W(相当于视锥点个数)。将bev特征沿着Z方向(dim=2)拍平,得到shape大小为(B,C,X,Y)大小的bev特征,比如(1,80,200,200)。bev_pool的目的是。对于感知算法而言,我认为比较重要的是要了解在Bev视角下,x轴和y轴方向的感知距离,以及Bev网格的大小。(1)基于 geom_feats在bev网格中的位置(x,y,z)和batch_id,对其进行排序。
2024-09-17 23:27:33
434
原创 算子加速(3):自定义cuda扩展
编写CUDA扩展的一般策略是首先编写一个C++文件,该文件定义了将从Python中调用的函数,并使用pybind11将这些函数绑定到Python。此外,这个文件还将声明在CUDA(.cu)文件中定义的函数。C++函数会进行一些检查,并最终将其调用转至CUDA函数。在CUDA文件中,我们编写我们实际的CUDA内核。包将负责用C++编译器(如gcc)编译C++源文件,以及用NVIDIA的nvcc编译器编译CUDA 源文件。这确保每个编译器都负责编译它最擅长的文件。最终,他们将链接成一个共享库。
2024-09-15 22:56:40
352
1
原创 算子加速(2):自定义c++扩展
(1) 用纯pytorch和python 实现我们需要的功能,看效果再决定要不要进一步优化(2) 明确优化方向,用c++(或cuda)重写部分代码(3) 用纯c++实现(4) 将模型的部分移动到CUDA内核来进一步加速,以便从GPU提供的大规模并行中受益。
2024-09-08 20:45:32
355
原创 算子加速(1): torch.autograd.Function的使用
在做Bev项目时,我们会发对于一些计算量非常大的算子,通常会通过CUDA进行加速实现,将cuda计算封装到一个动态库.so,然后提供给python调用,相对于原先的python加速能显著的提升计算效率。比如bev_pool就是通过这种方式实现离线计算和cuda并行,从而速度提升了几个量级bev_pool是Bev算法的关键的运算瓶颈,针对该问题工程上做了大量的性能优化,包括离线运算和cuda并行计算,从而实现bev_pool的计算加速。代码示例如下x,B,D,H,W,return out。
2024-09-08 17:46:17
545
原创 自动驾驶坐标转换(代码)
这两种方式都可以进行ego2bev转换,区别他们的坐标圆点不一样,从而图像会出现颠倒。lidar2cam的变换矩阵和lidar2ego 变换矩阵的获取,基本是一摸一样的的。(1)计算lidar2ego 变换矩阵。其中rotation 4元数,可以调用。经过转换,就将bev转到ego坐标系。(2) 计算转换矩阵(R+T)包,将它转换为矩阵的形式`(1) 在bev空间上绘制。(2) 在rv图像上绘制。为圆点的bev 坐标系。为圆点的bev 坐标系。(1) 以bev的。(2) 以bev的。
2024-09-05 15:12:43
275
原创 tensor和numpy 转换
而torch.as_tensor()则是一个折中的选择,它在可能的情况下避免复制,但在必要时会复制并转换数据类型。,可以接受多种类型的输入,包括列表、元组、NumPy 数组、标量值,甚至是另一个张量。这个方法会创建一个新的张量,并且复制NumPy数组中的数据。这意味着,原始的NumPy数组和新创建的张量是完全独立的,修改其中一个不会影响另一个。torch.as_tensor函数提供了一个灵活的方式来创建张量,并且可以指定数据类型和设备,这对于深度学习模型的输入数据准备非常有用。这个方法会创建一个新的张量,
2024-09-05 14:56:15
1975
原创 np.c_ 和 np.r_ 的使用
是 NumPy 库中的一个方便的索引工具,用于沿着第一个轴(行)连接数组。它常用于将多个数组或数组片段合并成一个更大的数组。np.r_ 可以处理一维或多维数组,并且可以一次性处理多个数组。np.r_ 是一个非常灵活的工具,可以用于各种数组合并的场景。这里,array1, array2, …, arrayN 是要连接的数组。这里,array1, array2, …, arrayN 是要连接的数组。在bev项目中,经常需要给数据增加一个batch_id,此时就可以使用。(3) 合并多个数组。
2024-09-04 11:32:27
829
1
原创 pybind使用详解: python 调用c++代码
对于一些运行很慢的程序,我们就可以使用c++去实现,利用pybind11将接口暴露给python去调用,这样就实现代码编写快速,程序运行高效的目的。主要是对c++实现的类如何进行python的绑定,这样我们就可以在python 中直接创建C++的类,或调用相应的函数功能。,甚至是更快的速度。这里实现一个最简单的pybind的案例,用C++实现一个加法运算,python去调用c++的加法运算。,对大矩阵运算非常快),其次是c++实现的,python原生的矩阵乘法使用了惊人的1499ms。
2024-08-31 20:35:42
669
原创 vscode c++和cuda开发环境配置
通过网盘分享的文件:vscode-cuda-cpp-demo-0828.zip。,从而在调试的时候,能够对修改过的最新代码进行及时的编译。对应的bear版本相对比较低,一般为2.4左右。配置好函数跳转,下一步配置GDB调试(debug)了,同时鼠标放在该函数上会有函数的提示信息。(2)根据源文件的目录,可以修改如下代码。此时原先不能高亮显示,或跳转的函数,就能。(4) make clean 命令。(2)bear make 命令。则对应的bear版本一般为。(1) make 命令。编译器的option。
2024-08-28 22:47:27
1015
原创 git的使用:创建分支并提交
在终端或命令行界面中,使用 git branch 命令来创建一个新的分支。在新分支上进行你的代码更改。这可能包括添加新文件、修改现有文件等。在Git中创建一个新的分支并将代码上传到这个新分支的基本步骤如下。这条命令不仅会推送分支,还会设置上游跟踪分支,(5) 推送新分支到远程仓库。(3) 进行你的更改。
2024-08-26 12:29:50
1607
原创 CUDA-BEVFusion(1): 环境安装
将TensorRT 8.5.3的安装包下载下来,注意需要注册一个Nvidia账号,登入账号才可以下载。, 因此可以11.8的CUDA 版本,尽量下载最新的。, 当我们想用另一个版本的cuda,我们将cuda的软链接指定到另一个版本就可以了。, 然后选择TensorRT 8.5 GA进行下载(GA 表示稳定版本)官网下载,默认下载的是最新版本的cuDNN,我们这里点击。,TensorRT是依赖于CUDA和CUDANN的。(2) 首先解压下载的cudnn包并进入该目录下。(1) 首先解压下载的cudnn包。
2024-08-25 19:56:28
397
原创 yaml文件写法和加载(1)
yaml 是专门用来写配置文件的语言,个人认为比yaml比json格式更方便。在Python中,使用PyYAML库来处理YAML文件是一种常见的做法。YAML(YAML Ain’t Markup Language)是一种数据序列化格式,它以。
2024-08-13 11:25:09
1600
MIOU涨5.6个点:语义分割知识蒸馏源码
2024-03-20
yolov8 剪枝源码(集成多种剪枝策略)
2024-03-20
yolov8 多任务(目标检测+可行驶区域分割+车道线分割)
2024-01-07
SOTA 跟踪论文:BoTSORT-OCSORT-StrongSORT 等
2023-12-21
yolov8 tracking支持deepocsort、strongsort、bytetrack、botsort等各类跟踪器
2023-12-21
yolov8 知识蒸馏源码
2023-12-18
YOLO 知识蒸馏学习及落地部署(v5和v8)
2023-12-10
yolov8 PTQ和QAT量化源码
2023-12-09
零基础掌握yolov8剪枝
2023-11-26
车道线UFLD-v2落地量化部署代码
2023-11-26
mmsegmentation中文文档
2023-11-26
yolov7 ptq和qat训练及tensorrt部署
2023-09-16
yolov7旋转目标检测完整代码
2023-05-13
yolov8s模型进行剪枝源码
2023-05-13
基于Tensorrt的yolov5 实例分割源码
2023-04-18
各种卷积计算性能对比(Conv,DwConv,GhostConv,PConv,DSConv,DCNV)
2023-03-26
基于yolov5的PTQ和QAT量化完整代码
2023-03-18
图像分割FCN算法的源码及项目实战
2023-02-04
YOLOX原理及无人机检测项目实战源码
2022-11-04
模型轻量化-YOLOv5无损剪枝
2022-10-28
基于yolov5的目标检测和双目测距源码
2022-10-28
pytorch多GPU并行训练教程及源码
2022-10-16
基于yolov5的知识蒸馏实战源码
2022-10-13
makefile从入门到项目编译实战
2022-10-13
图像分类MobileNet系列源代码:v1-v3
2022-07-05
深度学习图像分类花朵数据集
2022-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人