CMake进阶:find_package()函数完全解析与自定义模块开发指南
在 cmakelist.txt 文件中,find_package() 命令用于查找并加载外部库的设置。它并不直接管理依赖包,而是依赖于外部预设的模块或配置来找到这些库。
他找的路径是 cmake/module/XX.cmake
因此,如果是单独的项目,要进行编译,可以设置path
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake:${CMAKE_MODULE_PATH}")
这样的话,会去项目的cmake 目录找
GPU MEM 训练和微调估算
在训练或微调大型语言模型(LLM)和其他深度学习模型时,GPU显存限制往往是主要瓶颈。了解模型所需的最低显存是避免OOM(内存不足)错误的关键一步。以下是两个有用的在线工具,可以帮助你估算显存需求:
1. HuggingFace的模型内存使用估算器
HuggingFace提供了一个专门的工具,可以帮助估计训练和微调所需的最低显存大小:
名称:Model Memory Utility
链接:https://huggingface.co/spaces/hf-accelerate/model-memory-usage
用途:估算训练或微调模型所需的最低GPU显存
受欢迎程度:918个赞
这个工具允许你选择特定模型,并根据批量大小、精度等参数计算所需的显存。它可以帮...
ApacheBench (ab) 工具深度指南:突破单机并发限制与性能优化最佳实践
问题:ab -c 10000 报错 “too many open files”
在使用 Apache Benchmark (ab) 进行高并发负载测试时,当设置较高的并发连接数(如 -c 10000)时,经常会遇到以下错误:
too many open files
这是因为操作系统对单个进程可以同时打开的文件描述符数量有默认限制。在 Linux 系统中,每个 TCP 连接都会消耗一个文件描述符,所以高并发测试很容易达到这个限制。
解决方案:增加文件描述符限制
临时解决方案
使用 ulimit 命令可以临时增加当前会话的文件描述符限制:
ulimit -n 65535
执行此命令后,再运行 ab 测试:
ab -n 100000 -c 10000 http://yo...
Linux网络监控实战:使用NetHogs实时追踪进程级带宽占用与分析指南
sudo nethogs是一个在Linux系统中使用的命令行工具,用于监控网络流量。通过这个命令,用户可以实时查看哪些进程正在使用网络带宽。这对于诊断网络问题、监控网络使用情况或者仅仅是为了了解哪些应用程序正在访问网络非常有用。
安装 Nethogs
在大多数Linux发行版中,nethogs不会预装。你可以通过包管理器来安装它。
对于基于Debian的系统(如Ubuntu),可以使用:
sudo apt-get install nethogs
使用 Nethogs
以下命令启动nethogs:
sudo nethogs
sudo是必需的,因为nethogs需要足够的权限来监控网络接口和查看所有进程的网络活动。
功能和输出解释
启动n...
解决VS Code Remote-SSH连接失败:glibc版本不兼容问题的排查与修复指南
问题描述
在VSCode更新到1.86版本后,一些之前运行正常的Remote-SSH连接突然无法使用。这个问题主要出现在Ubuntu 18.04和更早版本的Linux系统上,而在较新的系统如Debian 12上则不受影响。
报错
更新1.86完成后,原来好好的 Remote SSH 再也连不上了,提示 GLIBC 版本太低
Warning: Missing GLIBC >= 2.28! from /lib/x86_64-linux-gnu/libc-2.27.so
Error: Missing required dependencies. Please refer to our FAQ https://aka.ms/vsc
code-remote/faq/old-linux ...
Linux内核调试实战:使用kallsyms追踪内核符号、函数调用与模块定位技术
问题
Linux 内核:能否在编译或者运行环境中找出 a 模块调用的某个函数来源于另外哪个模块吗?
解决方案:kallsyms
kallsyms 是 Linux 内核中一个重要的调试工具,它允许用户在内核运行时查看和解析内核符号。
kallsyms 的主要功能是提供内核符号的地址和名称,这些符号包括函数、变量、结构体、枚举等。用户可以通过使用 kallsyms 来查找内核中特定符号的地址,或者通过解析内核符号的地址来确定符号的名称。
kallsyms 的使用
只需要在内核命令行中添加 kallsyms=1 即可。添加 kallsyms=1 后,内核将在启动时生成一个符号表,并将符号表存储在 /proc/kallsyms 文件中。
用户可以通过使用 cat 命令来查看 /pr...
Python深浅拷贝详解:内存管理机制、实现原理与常见陷阱
引言
写torch过程中接触到torch.clone() 和 python.copy()
理解Python中的对象复制概念
在Python中,有三种主要的方式来”复制”一个对象:
赋值操作(=):创建对原始对象的引用,而非复制对象本身
浅复制(Shallow Copy):创建一个新对象,但内部元素仍指向原始对象
深复制(Deep Copy):创建一个全新的对象,包括所有嵌套的对象
赋值操作
list1 = [1, 2, [3, 4]]
list2 = list1 # 赋值操作,list2引用与list1相同的对象
list2[0] = 5
print(list1) # 输出:[5, 2, [3, 4]]
在这个例子中,list1和list2指向内存中...
NVIDIA GPU架构深度解析:CUDA Cores与Tensor Cores的技术原理与性能差异比较
区别
CUDA Cores 和 Tensor Cores 是 NVIDIA GPU 显卡中的不同类型的处理单元,它们设计用来执行不同类型的计算任务。
CUDA Cores:
CUDA Cores(Compute Unified Device Architecture Cores)是用于处理通用计算任务的核心。
它们是最基础的处理单元,能够执行浮点和整数操作,适用于各种计算密集型任务,包括图形渲染、科学计算和机器学习算法。
CUDA Cores 的设计侧重于提供高吞吐量的串行计算能力,适合广泛类型的通用计算任务。
Tensor Cores:
Tensor Cores 是 NVIDIA 在其后代 GPU 架构(如 Volta、Turing 和 Ampere)中引...
共计 130 篇文章,17 页。