2025-05-20 00:00:00
记录一下Su7 Ultra下赛道的准备,还有一些难找的信息、科普内容都汇总到一起了
赛车头盔有下面一些品牌:
Xquip,好像是唯一的国产品牌,入门型号FF-S4,FIA认证大概要2700左右,SA2020认证只用1700
OMP,优点是视野大,入门型号GP-R,2900左右
Aria,优点是帅,其实感觉好像差不多,入门型号GP6S,3400左右
SPARCO,入门型号W01,3000左右,碳纤维版5500,好便宜
Bell,高端牌子,入门型号GP3,4600左右,经典型号RS7,5500多,碳纤维版9700多,
Stilo,好像最便宜都5300,主打拉力头盔,GP类的好像比较少
我买了Aria GP6S,还行,送两个头套,不用额外买头套了
主要是防止你颈椎折断的,他需要和头盔适配,两个卡子是和头盔上的汉斯扣固定的,防止你过度低头,后面的靠背是防止你后仰过度
汉斯价格也不低,最少也要2000大几百
头套,如果头发比较长,头盔是比较紧的,容易夹头发和反折耳朵,所以大部分人会带头套然后再带头盔
还有赛车服、手套、鞋啥的,暂时还用不到,就先不考虑了,赛道日基本头盔是必须品,其他的要求不是很严格
赛车上的安全标准大概就是这么两类,FIA主要适合欧、亚地区的赛事,SA2020来自于Snell适合美国那边的赛事。由于这个规则不断演变,安全性要求越来越严格,所以这个标准一直在变,可以看到后缀的数字
FIA8859-2024
SA2020
FIA8859-2024,是现行标准,对应到头盔,每个头盔寿命只有5年,过了以后安全认证就不过了,它对应拿到的那个认证也只有5年有效期。国内一般都是认FIA的设备,所以无脑选FIA即可,不过价格也贵一些。
四点式的安装要求,挺麻烦的,随便改的只能说能用,但是能不能起到应有的效果,就要打个问题了
https://www.bilibili.com/video/BV1rbQDY2Ejs
先说明高翔的改装方式是完全错误的,四点式的安全带本来就不能被固定在座位自身上,这样这个安全带根本就没起作用。
这里要相对正规的安装,是需要使用后排的儿童安全座椅的卡扣(ISOFIX),做个转接即可,这样平常也很好取下来。
把这个插入到ISOFIX接口,然后四点式安全带连接到这个卡口即可,原本ISOFIX的带子就不要了
这个地方可能角度也有点偏大了,也可以系在座椅放下以后的黄色卡口上
接这个黄色(也有可能是银色)的固定卡口,安全性上可能会更好一点(这种方式是不需要ISOFIX的,直接安全带就能接了,长度也够)
腰部的安全带需要锚定椅子下方,这个板(L型拉环扣)需要把座椅弄起来固定上去,可以让4S店帮忙弄一下,也很简单,到这里基本上这个4点式的安全带就完全弄好了
改装成本很低,四点式安全带二百左右,ISOFIX二十多,L型拉环扣十几块,一共二百五不到就能解决安全带问题
这种方式是改动最小的,也相对安全,同时也最灵活的,电车就算日后需要年检了,也很简单就取下来,完全看不出来改装的事情
到小米4s店,跟他说明安装方案以后,他感觉是可以装的,不用收费,作为整备环节之一
小米4s的车间不给参观,但是由于我要沟通方案,还是进去了,其实好像也没啥机密的,就正常维修店
这个L型扣板和座椅其实有点不适配,座椅的滑槽下面有一个卡位方块,需要卡到车底盘下面,这个东西,还挺长的,大概有1cm高度,扣板的孔是过不去的,直接放这个方块下面,那你螺丝都拧不上了
然后我摸了一下,这个前面还有一个定位的长柱子,这个柱子就比较细了,扣板可以扣下去了。
但是还是对整个座椅有点影响,他把座椅垫高了一点一点,大概3mm左右,这就导致后面轨道不是完全卡下去的,稍微有点影响安全
弄完以后我的4点式安全带就可以真实用了,试了一下还是很牢固的,但是会限制到座位前后移动,安全带的扣和座位侧面有点阻碍。
后续发现座椅下面有一个几毫米的空间,可以穿过布带,那这个方案还能做的更好。
顺便在4s店看了一下最近传的比较多的大灯上盖板翘起的问题,确实有,很多外面晒的车,多少都有一些,微微弓起了,能看出来不是以前的严丝合缝。
考虑到你可能上墙,所以有些赛道要求你必须安装了拖车钩才能上赛道。
Su7和Ultra都是在车右侧灯下有这么个活动门,旋转就能取下,拖车钩在后备箱的工具包中,旋紧即可,同时外接电的电源线也在这里,车彻底没电时,这个电源线可以外部充电,从而打开前备箱,进而维修充电什么的。
拖车钩安装以后,这个盖子可以放到后备箱里,那个红线可以塞回里面,最好带个胶带把正负极粘一下,防止碰到一起了,有个老哥直接现场拿胶带粘前面了,稍微有点搞。
主要是深圳周边的,可能可以去玩的赛道
ZIC的赛道日,需要关注公众号珠海国际赛车场ZIC1993
和泛珠三角超级赛车节ZIC-1993
,还有一个公账号是精彩乐动
,应该都是ZIC官方的活动号,赛道体验或者活动可以通过他们获取相关信息
报名用的是微信的报名工具,填一些基本信息就可以了,双人套餐更便宜一些,不过是两人共享时间,时间上有点少
ZIC的赛道日比较少,大概一个季度能来一次,珠海赛道日可以不用自带头盔,还挺好的,对车也没啥要求,你就只管开就行了。
ZIC赛道算是相对其他来说比较合理的,适合GT类型的车去跑,Su7也有一战之力。
纵观全国所有赛道,只有珠海赛道是最长的,直线给的也是最多的,非常适合新手去体验一下超级速度,适合Ultra去玩,其他赛道相比之下直线就比较少了,弯道就比较多,珠海的服务各方面做的也都算是不错的了。
珠海也有半年卡,1999,可以跑5次,每次30分钟,也就是一次200,还是挺不错的。
赛事活动关注公众号:从化国际赛车场
,从化赛车场主打摩托和卡丁车,汽车的很少很少,日常是可以买卡丁车票去玩,但是汽车赛道日基本没有,所以可以忽略这个赛车场
GIC之前说要拆掉的,后来又停了,由于这个名字和麻涌的都特别像,我们就用地名称呼,这个是肇庆赛车场,赛事活动关注公众号:广东国际赛车场
GIC这个价格看起来挺便宜的,而且可以玩的时间,看日历很多,他一节30分钟,珠海15分钟,差距啊…
GIC赛道体验也是有活动的方式,报名需要询问对应的联系人,价格是750,时间不一定,需要每次问
麻涌赛车场的活动需要关注公众号:广东竞速国际赛车场
或者是方舟赛车
,有活动会发公告
麻涌赛道日大概是一个月一次,价格就是贵一些688,但是胜在时间长,相当于一伙人包一天了,然后不含头盔,需要你自己处理
麻涌的赛道日,价格688,含保险。车不允许用热熔或者半热熔轮胎,不能改装。新手第一次就是需要弄个头盔,其他倒是没啥大问题。
麻涌赛道偏小,弯道超级多,而且都是那种180的掉头弯,开起来难度还是挺大的,适合弯道选手,车比较轻的那种。Ultra在这里没有明显优势,反而很危险。
没有任何联系方式,老的运营方的公众号:惠州福岗赛车场
,基本都没人管了,所以不知道现在是什么情况,只是看B站或者其他分享偶尔有在这里玩的信息,但是具体怎么个规则,可能还得现场去了才知道。据说:全天票800,半天票600,半小时300,10分钟150,这个18年就是这个定价
福岗赛道是最小的,一共才1.4km,据说是卡丁车改的,比较适合小车漂移。
赶上的赛道日就去体验一下,本来刚提车那会3月底就有ZIC的比较大的活动赛道日,然后就给错过了,后来4月底好像还有一个,去了越南也错过了,这次5月底的总算赶上了。
赛道体验之旅基本大差不差,都是这样的
5.25去ZIC赛道日体验
行程大致如下:
10点前签到,然后接着开始赛道前培训,20分钟结束,接着大家下去开车到维修区排队,10点30等待安全车带着跑2圈回到维修区,然后就是正式的15分钟。大致30分钟结束,然后第二组继续上一个循环。如果双人体验,自行决定15分钟何时回到维修区换人。
实际体验,新手还是挺多的,一场会亮个一两次红灯,有车故障停在路中,也有Ultra冲下沙石地导致红灯。再加上慢车很多,实际跑起来很难跑出像模拟器里一样,完整的一圈。
提前跑模拟器还是有用的,至少你知道在哪里需要刹车,你对能不能过这个弯以及后果认知是很清晰的,上了赛车场就跟回家一样熟悉
上午弄完了,下午就可以去玩卡丁车了。卡丁车也很近,过了赛道桥往后走就到了,卡丁车还是比较好的,车子也还行,提供头盔、汉斯,现场工作人员都帮你弄好。
下午是电车油车的半年卡活动,油车人很多,但是电车据说人很少,就4个电车,还2个Ultra,他们就能完整开一圈,可以开到1.50+,还是很不错的。等下半年年卡放出来,再去玩玩,年卡一场好像是半小时,算来下一场才200块,很便宜。
小米的这个赛道大师,数据不能导出,赛道也不会自动录个单独的一圈的视频,哎很蠢,想对比一下别人的数据或者跑法,就不行。
5.31去麻涌赛道玩一天,实际安排其实很差。
说是自由跑一上午,其实实际给新人就只有一节,然后另外一节是中午没人要的时间,下午还有一节直接用来比赛了。每节时间间隔都非常长,等起来很消耗精力。摩托车是临时加上去的,然后又临时去掉了,整个时间安排现场又有改动。
麻涌赛车场,新人培训,也是野人培训的,有很大偏见,对比珠海来说不够客观,也不够专业,培训者好为人师。
我上午跑的第一节就跑出了我的最快,74秒,中午太热了,根本没状态,都是80多秒。
实际麻涌赛道由于过短,人又多,分组很多,但是每组只有8个人,而且分时间入场,跑起来更像一个人在玩,新人基本没有超车什么的危险的行为。整体可以完全沉浸其中挑战自我,这点比珠海好。
下午太热了,我提前撤场了,然后计时赛中就出现了Ultra和Max相撞的情况,两人双双退赛,Ultra车损可能高达5w,还得自费,那个老哥直接血亏。
我跑模拟可以跑到61s左右,实际开发现,确实有很大差距,很多地方速度不敢提上去了,赛道比较滑,过弯都是磨着轮胎叽叽叫着过的,赛道中同一个位置(T5转T6)spin了两次,尾巴刮到了一点树丛,还好及时救回来了,没有出更大事故。
看了一下分组赛成绩,油车,类似86这种在这里非常快,都接近60s,全场最快有一个60s的,非常厉害了。
每组的前三可以得到一个小奖杯,可以上领奖台,有点意思。
如果是第二次去玩,就是非新人身份,可以提前去了提前进去练习,晚上弄完了也有自由练习时间,甚至还有自由包场时间(价格也还行)。
大佬指点说很多地方入弯太快了,一直响轮胎,可以更慢入,更快出弯。
Ultra Club赛道的会员服务,不支持小赛道驻场,只有珠海这种大赛道才有赛道驻场(目前情况是非小米官方组织,连场都进不去,很尴尬)
去赛道日前,预约上面检查,他就想你开去4S店检查,感觉让他上门服务也有点不情不愿的。别人up主那里就各种凌晨服务、很舔,到你手里就有点看人下菜的意思了。服务还是有的,四点式安全带让他们协助安装了,遇到了一个小哥很积极,人很好。
具体到赛道日的时候,珠海由于是官方的,非小米的,所以赛前检查他们进不去(小米竟然没把这里的关系打通,我服了),他们就在车场门口等我,放胎压,检查一下常规的东西,安装拖车钩啥的,虽说是附带小米的赛道大师讲解,教学,但是实际上这个人没下过赛道,没跑过模拟器,赛道大师你觉得他能用过吗?
跑完以后,再开回来给他们继续检查,说我胎没热起来….那个冲出赛道的也直接预约拖车送回店里检查去了。
这是之前一个车友进石子地以后的情况,地上很多石头,清了两次才弄干净,这种情况Ultra会员可以免费处理,还是挺好的。
官方一直没有车友会,找个其他人也联系不到,给你拉群,就只拉你一个,我服了。我自己组,珠海一天就遇到10个Ultra,遇到一个我拉一个。
有需要进群的可以找我拉进去
漂移场地找不到,之前有一个中山的三角漂移场,不过好像也倒闭了?现在也联系不到了。
DDD漂移俱乐部在广东省珠海市快泊停车场,看了下场地也很小,不如三角漂移场,自由玩价格还行,但是体验价格有点贵的离谱了。更有性价比的地方,深圳附近再没听说了,大概就是这样吧
麻涌赛车场,漂移500,4h
还有漂移教学的价格,挺贵的,不过如果能教会还是挺不错的。
其他正经赛车场好像都有一块区域给漂移使用,比如福岗赛车场,珠海赛车场,但是具体收费?体验什么的好像都没有说明,等我去了看过再补充
国内这个赛道信息有点难找,普通人想进圈子都比较困难,本身安全设备也不能少,而且由于小众,价格下不去,玩车的的额外成本还真不少。
总体来看珠海ZIC是最适合Ultra去玩的,正规、总体价格相对也不贵,容错空间大,失误也比较难致命,培训体系都比较完整客观,可惜的是能去玩的时间比较少。
2025-05-19 00:00:00
之前做了QEMU模拟运行FreeRTOS,模拟STM32,但是毕竟不是官方QEMU,对于嵌入式这边的芯片或者设备模拟还是差一点。
https://www.qemu.org/docs/master/system/arm/stm32.html
Renode比较知名的就是用来模拟物联网设备,这种设备往往都弱一些,MCU这种比较多。
具体关于这两个说法有很多,谁更合适还是要实际用一用,体验一下才行
https://renode.io/
https://github.com/renode/renode
Renode 的指令模拟器使用 C 语言编写,外设模拟器使用 C# 语言编写,兼顾了运行效率和开发效率.
Windows下直接安装即可,启动以后是一个命令行程序,这里可以加载我们的模拟固件
start @scripts/single-node/stm32f746.resc
不建议跑这个例子,只是个输出helloworld,超级卡
start @scripts/single-node/stm32f746_mbed.resc
启动以后就能看到输出了
stm32f746.resc文件解析
# 定义仿真平台和描述
:name: STM32F746
:description: This script runs Dartino on STM32F7 Discovery.
# 创建仿真机器
using sysbus
$name?="STM32F746"
mach create $name
# 加载平台描述
machine LoadPlatformDescription @platforms/boards/stm32f7_discovery-bb.repl
# 配置显示和分析器
# 设置LTDC(LCD-TFT显示控制器)在仿真中的虚拟帧率为每秒100帧;
# 详细解释如下:
# ltdc:指的是仿真平台中的LTDC外设(LCD-TFT显示控制器);
# FramesPerVirtualSecond:表示“每虚拟秒的帧数”,即仿真环境下LTDC每秒刷新多少帧;
# 100:具体的帧率数值,这里设置为100帧每秒;
# 作用:
# 在Renode仿真环境中,LTDC的显示刷新速度会按照这个帧率进行模拟。这样可以控制仿真中LCD显示的流畅度和性能,便于调试和观察# 显示效果;
# 总结:
# 这条指令就是让仿真的LTDC每秒刷新100帧,用于控制虚拟LCD的显示速率;
ltdc FramesPerVirtualSecond 100
showAnalyzer usart1
showAnalyzer ltdc
# 指定要加载的固件,需要elf,而不是bin
$bin ?= @https://dl.antmicro.com/projects/renode/dartino-lines.elf-s_486816-cd8876ab9de60af779f4429dfe16c79bf831b84d
# 可以在模拟启动以后开启Gdb,这样就能直接接入进行调试
# machine StartGdbServer 3333 true
# 定义reset宏
macro reset
"""
sysbus LoadELF $bin
"""
# 自动运行reset宏
runMacro $reset
platforms/boards/stm32f7_discovery-bb.repl,关于硬件的描述在本地就有,看一下具体内容
using "platforms/cpus/stm32f746.repl"
phy: Network.EthernetPhysicalLayer @ ethernet 0
Id1: 0x0007
Id2: 0xC0F1
AutoNegotiationAdvertisement: 0x00A1
AutoNegotiationLinkPartnerBasePageAbility: 0x001
phy1: Network.EthernetPhysicalLayer @ ethernet 1
Id1: 0x0007
Id2: 0xC0F1
AutoNegotiationAdvertisement: 0x00A1
AutoNegotiationLinkPartnerBasePageAbility: 0x001
touchscreen: Input.FT5336 @ i2c3 0x38
isRotated: true
MaxX: 480
MaxY: 272
-> gpioPortI@13
可以看到这里定义了两个phy给以太网用,还有一个触摸屏,使用的是i2c3的接口,地址0x38,大小,使用的GPIO
使用外设指令,可以查看当前设备的外设和地址
peripherals
由于官方没有给h7的resc文件,我们就模仿f7写一个
:name: STM32H743
:description: This script runs demo on STM32H743.
using sysbus
$name?="STM32H743"
mach create $name
# 由于没有h7的board 所以这里用cpu模拟
machine LoadPlatformDescription @platforms/cpus/stm32h743.repl
# 模拟所有串口,注意串口名称可能不同
showAnalyzer usart1
showAnalyzer usart2
showAnalyzer usart3
showAnalyzer uart4
showAnalyzer uart5
showAnalyzer usart6
showAnalyzer uart7
showAnalyzer uart8
$bin ?= @platforms/bin/stm32h743.bin
macro reset
"""
sysbus LoadELF $bin
"""
runMacro $reset
启动测试
start @scripts/single-node/stm32h743.resc
在访问特定外设进行读取后执行 Python 脚本
(machine) sysbus SetHookAfterPeripheralRead gpioPortA "print '%s peripheral has been accessed to read'"
在访问特定外围设备进行写入之前执行 Python 脚本
(machine) sysbus SetHookBeforePeripheralWrite peripheral "print '%s peripheral has been accessed to write'"
include可以包含多个模拟器,启动的时候就会都启动,如果是多芯片模拟就比较适合
include @scripts/single-node/quark_c1000.resc
Renode里有模拟传感器数据的方式,相当于是你给一个数据表,类似CSV结构的,然后指定好接口,频率什么的,硬件就可以直接从这个表中读取到对应的传感器数据了
https://renode.readthedocs.io/en/latest/basic/resd.html
传感器本身的寄存器或者配置,这个机制需要额外去实现,官方有具体的例子
https://github.com/renode/renode-infrastructure/blob/3f1abde88ac5a2dae326b77ab91892f335e78f80/src/Emulator/Peripherals/Peripherals/Sensors/ADXL345.cs
看起来还是比较简单的,就是列出来可能会用到的寄存器,然后实现他的读写,数据寄存器需要额外的一个喂数据接口即可。
大部分外部传感器可以仿照这个来,只要补充寄存器定义和某些返回数据的接口即可
这个是打印机固件仿真逆向的项目
https://github.com/nviennot/stm32-emulator?tab=readme-ov-file
There’s some existing work in the STM32 emulation space:
- Mini404 emulates the Prusa Mini. Quite a feat. See the project’s hw/arm/prusa for the peripherals.
- Qiling emulates all kinds of devices, including STM32s. It would be a good candidate, but wasn’t fitting the bill because 1) it’s written in Python, and is very slow. 2) It doesn’t support what I really want which is tracing in registers that I care about.
- Renode: Emulate all sorts of devices, written in C#. The configuration files are finicky, and it’s overall pretty slow. I didn’t like it.
- Tinylabs’ flexsoc-cm3: This is Elliot’s project to have the real stm32 peripherals to be accessible directly to a host that is emulating a CPU. I haven’t tried it, but it looks promising.
- Use GDB and single step everything. That might be too slow.
前人的经验,主要是嫌弃模拟比较慢
Proteus的仿真也很常见,但是也只适合小型程序仿真,不适合复杂程序。而且绑定了硬件整体也必须得用Proteus才行,两边要配合起来,实际现实中用的还是比较少。可能是以前的PCB比较贵、周期长,没验证好直接打板成本很高吧,所以才有Proteus的仿真,但是现在速度快、成本低,完全用不到。
https://www.arm.com/zh-TW/products/development-tools/simulation/virtual-hardware
还有一个是ARM官方的虚拟化硬件,不过这个东西没有实例,也不知道具体细节是什么样的
比较复杂的是实现外设仿真,这个部分还得看怎么处理
https://github.com/silent-rain/stm32f103-tutorial/blob/master/docs/Renode%E4%BB%BF%E7%9C%9F%E6%A8%A1%E6%8B%9F.md
2025-05-16 00:00:00
GPU相关一些基础建设的常识
TPU,张量处理单元,主要是进行矩阵乘法计算
NPU,其实类似TPU,但是他是一种定制的计算规则,比如矩阵先乘后加,先加后乘,或者是更复杂的乘加乘加等等,相当于是定制化的计算单元,他是有适用的局限性的。如果专门为某个算法而生,那么这个算法就能吃满硬件加速,远超CPU或者TPU等其他方式实现的计算速率。
GPU,主攻并行计算,常常需要CPU指挥,广义上GPU是包含了TPU、NPU的,所以主力是强大的专业算力。
CPU,主攻逻辑运算,广义上CPU是可能会包含NPU和TPU,GPU的,但是多而不精,遇到一些专业问题,还是得专业的来搞。
但是,其实现在GPU的广义定义可能又发生改变了,英伟达新系列已经把一个小CPU作为协处理器融入到了GPU芯片中,这样GPU里就会包含CPU,因为在AI计算力,CPU不是大哥了,对于CPU的需求不是那么高,那么直接融一个ARM系列的GPU进去,显然是十分容易的。而且本身英伟达以前就做过客户端的ARM系列的CPU,这算是老树开新花了。
问一个模型,如果可以给无尽的资源,那么这个模型的训练、运行效率会被什么东西卡住。
目前来说,主要被限制的大概就是三个地方,GPU算力TOPS,GPU显存大小GB,GPU显存速率(如果显存无限大,可能没这个事情)。
粗浅的可以把模型分为训练和推理两个阶段:
训练相对推理来说,是更需要资源的,基本什么东西都要更好,更高的
推理阶段,往往是为了高并发,服务大规模使用者,而需要更大规模的GPU集群,但是模型本身可能只需要单GPU就能运行了。
NvLink,早年的NvLink主要是可以让双卡之间直接进行通信(NVLink Bridge),可以共享显存,而不需要走PCIe通道,让别人帮忙转发消息,这样速度非常快
这样速度可以达到双向900GB/s,远超内存等速率,但是此时NvLink只能双卡,双卡的规模面对巨型AI来说,还是太小了,于是乎就有了后续NvSwitch。
NvSwitch,就让原来的NvLink从双卡拓展到了8卡,8卡之间可以互相通信共享显存了。NvSwitch可以认为类似网络中的交换机,但是它实际上一个芯片模块,是直接在GPU主板上的。到了这个阶段,还是无法满足超级大显存的需求,于是乎又有了NvLink Switch。
NvLink Switch,他是真的变成了GPU的交换机,他变成了一个独立设备,用来跨主机连接不同的GPU集群。
除了NvLink这种英伟达自家的集群方案,还有一种就是通过网络来组集群,只是这种方式速度要比英伟达的方案慢一些
主要是说明数据链路级别的瓶颈
PCIe,目前最新是6.0,但是还没有实物,5.0才刚落地,速率大概是32GT/s,就算是6.0也才64GT/s,单通道是大概是7.876 GB/s,如果使用更多通道就可以*n,比如16通道就能达到126GB/s,单向速率也就是63GB/s。
DDR,目前最新是6.0,还是没实物,5.0落地一段时间了,速率大概是12800MT/s,明显比PCIe慢了许多
HBM,目前最新是3.0,速率大概是819 GB/s,比PCIe和DDR都要快很多,但是3.0还没落地,现在还是2E
阶段,速率大概是461GB/s,所以目前是GPU的首选内存
NvLink,起步就900GB/s了,甚至比HBM还快
Ethernet,目前落地的200Gb/s的网卡,只能达到25Gb/s的传输速率,整体比PCIe还是要慢一些的。
所以如果组集群或者涉及到多个GPU服务器之间通信,最后的瓶颈往往都落在了这个网络和GPU到PCIe的头上
抄个表格,这里只说了英伟达和华为,其实还有AMD和一些其他厂商,只是规模比起来有点小而已
NVIDIA | HUAWEI | 功能 |
---|---|---|
GPU | NPU/GPU | 通用并行处理器 |
NVLINK | HCCS | GPU 卡间高速互连技术 |
InfiniBand | HCCN | RDMA 产品/工具 |
nvidia-smi |
npu-smi |
GPU 命令行工具 |
CUDA | CANN | GPU 编程库 |
DCGM | DCMI | GPU 底层编程库/接口,例如采集监控信息 |
比较关键的就是CANN/CUDA,他整体定义了整个GPU算力的计算逻辑,或者说你能发挥多少GPU算力,都取决于这里怎么实现。
不同的模型或者算法,底层计算逻辑可能是不一样的,需要结合硬件对算法进行优化、加速,那么英伟达就提出来了一种基于英伟达GPU的通用接口,只要你按照这个逻辑去调用GPU,就能完整发挥这个GPU的硬件性能,否则每次算法或者模型都需要对不同的GPU做适配,这不得累死。
CUDA就成了英伟达的护城河之一,CUDA在整个领域中占比可能有90%之多,之前AMD搞得兼容CUDA的兼容层,都是为了想办法抢一部分他的客户,你不兼容CUDA,那你就要重新写底层优化,那就不具备通用性,那谁愿意用呢。
到GH200 这里,英伟达就意识到了之前服务器的局限,这里直接用自己的CPU和GPU,然后把内存也内置进去,然后这些内部访问都是可以直接通过NvLink的,不走什么PCIE了,相当于抛弃了传统服务器那一套东西,我自己玩了,充分降低了整个系统间互相通信的延迟。
基于GH200 构建了一个机柜NVL32,他直接就能提供19.5TB的内存+显存,而且任意一个GPU都可以访问,而且还能再扩展显存。这个机柜还能再次组成集群,从而适用于超大规模的模型的训练和推理
后续有新发现再补充
arthurchiao.art写的很详尽,拿来入门很适合,作者应该是携程的赵亚楠,看他的blog里基础和翻译文比较多,下面几篇基础都写的挺好的,值得一看
https://arthurchiao.art/blog/gpu-advanced-notes-1-zh/
https://arthurchiao.art/blog/gpu-advanced-notes-2-zh/
https://arthurchiao.art/blog/gpu-advanced-notes-3-zh/
https://arthurchiao.art/blog/gpu-advanced-notes-4-zh/
https://developer.nvidia.com/zh-cn/blog/nvidia-nvlink-and-nvidia-nvswitch-supercharge-large-language-model-inference/
https://www.nvidia.cn/data-center/nvlink/
https://www.bilibili.com/video/BV1SZdwYTEM8
2025-05-13 00:00:00
Cursor配置详解
关键点还是写在前面,如果你是个新手,Cursor可以帮你快速达到一个熟手的水平,但是要再提高,还是需要你自己去深入代码,深入设计本身,Cursor只能把你拉到一般水平,专业的事情,还是要专业的人来做。
Cursor免费版本,可以有半个月的试用,你可以去体验,对比一下,看是不是符合你的习惯;我们默认给配的都是Pro版本,Bussiness版本和Pro一样,只是多了一些审计的功能,没必要,企业版需要250+人才有资格谈
https://www.cursor.com/cn/settings
正常来说我们用的Pro版本,每月都有500次高级模型的请求次数,gpt-4o-mini这种小模型有不限次数的请求,建议用高级模型,一般不容易用完这500次
可以看到在自动补全以后,会灰色提示你需要导入这个包
使用Doxygen的注释方式来写代码,这样这代码既可以被作为文本导出,同时也能让AI帮忙完成代码编写
/**
* Initialize the AVCodecContext to use the given AVCodec. Prior to using this
* function the context has to be allocated with avcodec_alloc_context3().
*
* The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
* avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
* retrieving a codec.
*
* @warning This function is not thread safe!
*
* @note Always call this function before using decoding routines (such as
* @ref avcodec_receive_frame()).
*
* @code
* avcodec_register_all();
* av_dict_set(&opts, "b", "2.5M", 0);
* codec = avcodec_find_decoder(AV_CODEC_ID_H264);
* if (!codec)
* exit(1);
*
* context = avcodec_alloc_context3(codec);
*
* if (avcodec_open2(context, codec, opts) < 0)
* exit(1);
* @endcode
*
* @param avctx The context to initialize.
* @param codec The codec to open this context for. If a non-NULL codec has been
* previously passed to avcodec_alloc_context3() or
* for this context, then this parameter MUST be either NULL or
* equal to the previously passed codec.
* @param options A dictionary filled with AVCodecContext and codec-private options.
* On return this object will be filled with options that were not found.
*
* @return zero on success, a negative value on error
* @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
* av_dict_set(), av_opt_find().
*/
下面是补全的代码内容
/**
* @brief 初始化AVCodecContext以使用给定的AVCodec;
*
* @param avctx 要初始化的上下文;
* @param codec 用于此上下文的编解码器;
* @param options 包含AVCodecContext和编解码器私有选项的字典;
*
* @return 成功返回零,失败返回负值;
*/
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
{
int ret = 0;
/* 检查参数有效性 */
if (!avctx || !codec)
{
return -1;
}
/* 检查编解码器兼容性 */
if (avctx->codec && avctx->codec != codec && codec)
{
return -1;
}
/* 设置编解码器 */
avctx->codec = codec;
/* 初始化编解码器特定数据 */
if (codec->priv_data_size > 0)
{
/* 分配编解码器私有数据 */
if (!avctx->priv_data)
{
avctx->priv_data = av_mallocz(codec->priv_data_size);
if (!avctx->priv_data)
{
return -1;
}
}
}
/* 应用编解码器选项 */
if (options && *options)
{
/* 处理选项字典 */
ret = av_opt_set_dict2(avctx, options, AV_OPT_SEARCH_CHILDREN);
if (ret < 0)
{
return ret;
}
}
/* 调用编解码器初始化函数 */
if (codec->init)
{
ret = codec->init(avctx);
if (ret < 0)
{
return ret;
}
}
return 0;
}
从这里反向提取一些有用的信息,你得告诉AI什么,他才能帮你写好代码
/**
* 说明这个函数要用来实现一个什么功能
*
* 附加这个函数可能可以使用的函数或者子功能可以用某些现有的函数来替代
*
* @warning 使用这个函数的警告信息,比如线程安全与否
*
* @note 使用这个函数要注意的点,比如必须先调用某个函数才能调用这个函数
* @ref 参考信息,比如某个关联的函数
*
* @code
* 一般是在行程文档时给出的示例代码
* @endcode
*
* @param 函数的输入参数是什么,具体类型,作用
* @param 同上,多个参数时使用
*
* @return 函数的返回值是什么,明确说明关联的状态
* @see 引入参考信息,是单独成列的,可以跳转的,比如某某类似功能的函数
*/
对于Cursor补全的代码,可以再次进行反问,你甚至不用在意这个代码是否正确,直接反问他就行
一个正确的内容是经得起多次质疑的
同一个问题,如果新建一个对话,AI就会完全忘记你上次教他的内容。同样的上下文隔了非常远,AI也会忘记教他的内容
这里的SCB_InvalidateDCache放在HAL_SD_ReadBlocks_DMA的后面是否正确
再次重复对话,他还是会出错
我一共问了四次,第五次让他看看他自己回答的内容
AI本身不是万能的,对于他了解不全的内容,他会反复摇摆。
直接拿Cursor当作知识库去提问一样可以
Cursor阅读PDF比较困难,之前我有用转成txt在询问,但是对于大文本不是很好,那种图文夹杂在一起的也不是很好用
这里可以用这个项目,把pdf转成markdown,做成类似RAG的知识库,然后作为一个项目给Cursor去读
https://github.com/denisalevi/bib4llm
安装
pip install bib4llm
使用
bib4llm convert xxxx.pdf
比如这里使用 bib4llm convert ./invoice.pdf
他会直接生成一个新目录,这个目录下就是转换后的内容,你可以直接用Cursor打开这个目录,然后进行提问即可
对于那种拍摄的PDF,不是源文本的,可以用下面这个在线工具来清晰化PDF
https://mistral.ai/news/mistral-ocr
可以直接对Git提问,甚至可以直接比较不同Commit之间的区别
让他评价一下commit,看下是否有问题
Cursor是支持deepseek的,但是我试过感觉效果不是很好。建议使用claude-3.5-sonnet或者gemini-2.5-pro-exp-03-35
如果后续继续出新模型,也建议用新模型,Cursor上新还是非常快的
如果问的比较深或者回答效果你感觉不是很好,可以把Thinking勾上,AI思考链会增加,可能更容易理解你的想法
可以用Tab自动帮你导入没导入的模块,类比VS里C# 复制一段某个模块的代码,会自动搜索对应的内容,直接就能在文件头添加这个模块
使用较大的上下文,这个可以明显提升AI对你提出要求的理解,但是消耗请求可能更多
git add 这个文件
,相当于认为这文件修改就是可行了,建议还是不要勾选,你可能分不清哪部分是你应该改的,哪部分是误操作改的补全选项里可以忽略一些文件,比如你有一些特殊文件,他不应该参考,比如这里的password.txt
就可以用类似.gitignore
的方式来忽略
比如这里提一个规则,所有注释必须以分号结尾,规则模式是必须,可以看到AI给出的注释建议,自动增加了封号
也可以通过这个规则,快速让Agent梳理代码格式,如果规则内给的代码格式够多的话
这个规则可以设定的很复杂,比如什么目录用什么规则,什么文件用什么规则
Cursor也可以直接引入外部文档或者链接,类似RAG一样,作为代码提示或者Agent搜索的额外知识库
比如这里,我就直接把Maya Cmds的API文档输入进去
https://help.autodesk.com/view/MAYAUL/2024/ENU/?guid=__CommandsPython_index_html
在与Agent的对话中,就可以稍微上刚才加入的知识库作为搜索对象
然后对这个内容进行提问即可,同样的这个地方可以对规则、终端、Git等等信息直接进行提问
MCP的介绍就是另外一个内容了,比较复杂,需要先安装好node.js,然后系统可以正常调用到他
filesystem的安装代码
{
"mcpServers": {
"filesystem": {
"command": "powershell",
"args": [
"-WindowStyle",
"Hidden",
"-Command",
"npx -y @modelcontextprotocol/server-filesystem C:/Users/elmag/Desktop"
]
}
}
}
然后就可以让AI直接帮你建立对应的文件
同理类似的有MySql的、搜索的、画UI的,等等各种MCP应用,让AI可以直接调用程序,完成你的要求
mcp-server-chart用来画图的配置
{
"mcpServers": {
"mcp-server-chart": {
"command": "npx",
"args": [
"-y",
"@antv/mcp-server-chart"
]
}
}
}
对AI进行提问时需要附带上工具和显示方式
使用mcp-server-chart画一下这个项目的结构关系,并以markdown的图片语法渲染显示
例如,使用Command + K
进行内联编辑,使用Command + L
启用聊天功能,使用Command + I
启用Composer 。熟悉这些快捷键会节省很多时间,使工作流程更加高效。
Cursor的配置总结还是比较少的,官方的功能说明写的很难看懂啊
https://breezetemple.github.io/2019/12/27/doxygen-syntax/
2025-05-10 00:00:00
顺便把SD ComfyUI搭建一下
https://github.com/comfyanonymous/ComfyUI
最好先安一下python 3.12的环境, ComfyUI的一些老库可能运行不了
uv python install 3.12
uv venv
source .venv/bin/activate
uv python pin 3.12
拉取ComfyUI源码
git clone https://github.com/comfyanonymous/ComfyUI.git
git checkout v0.3.33
安装CUDA
wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run
sudo sh cuda_12.8.0_570.86.10_linux.run
sudo vi ~/.bashrc
增加cuda到环境变量中
export PATH="/usr/local/cuda-12.4/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH"
验证 CUDA安装成功
nvcc -V
安装依赖包
uv pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
安装依赖文件
pip install -r requirements.txt
修改端口启动
python main.py --port 15070 --listen 0.0.0.0
模型文件可以从官网拿,也可以从huggingface来
https://huggingface.co/stabilityai/stable-diffusion-3.5-large/tree/main
比如SD3.5就可以在这里直接下载,下载完成以后把模型放入到ComfyUI/models/checkpoints
目录下
如果是SD就只需要这一个模型文件就可以了,如果其他模型可能还需要vae等模型
如果是从huggingface上直接拉,需要安装git lfs,这种适合大文件下载
git lfs install
git clone https://huggingface.co/stabilityai/stable-diffusion-3.5-large
Flex.2预览版
https://huggingface.co/ostris/Flex.2-preview/tree/main
如果服务已经启动了,那么要重启一下ComfyUI
后续发现,其实只要ComfyUI启动了,就可以让ComfyUI自己下载,不用提前放进去也可以
访问就能看到界面了
http://主机IP:15070
一进来就有各种模板可以选了,缺少文件就能直接下载,而不用手动一个个找了
简单的工作流已经可以了,速度很快
SD3.5的简单模板
目前看起来实际使用只有单GPU在工作,如果多任务可能用到多GPU,但是单任务多GPU的模式,似乎现在还不成熟,也只有部分测试的模块可以。
折腾AI相关内容,很容易涉及到各种python包和python本身的版本变动,以前是用anaconda,后来anaconda商业化了,对于商用需要授权了,所以很多使用直接就抛弃anaconda,投向其他新的环境管理阵营了
对比一下当前的几个虚拟环境管理工具
记录一点uv使用的操作,ComfyUI 这些就是用uv来完成了
强行安装uv进系统
pip install uv --break-system-packages
创建一个虚拟环境,本质上会创建一个.venv
文件夹
uv venv
激活虚拟环境
source .venv/bin/activate
uv和pip结合,如果你只熟悉pip,那 只需要在原来pip前面加个uv就行了,剩下和以前一样
uv pip install flask pandas numpy
uv pip install -r requirements-dev.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
如果是个新环境,可以通过这种方式记录下来当前所有依赖包,方便后续项目使用
uv pip freeze > requirements.txt
同理安装环境
uv venv && source .venv/bin/activate
uv pip install -r requirements.txt
uv 安装多个版本python
uv python install 3.10 3.11 3.12 3.13
切换项目python版本
# 项目A使用Python 3.8
cd project_a && uv venv --python 3.8
# 项目B使用Python 3.11
cd project_b && uv venv --python 3.11
使用指定版本
uv python pin 3.12
ComfyUI还是好用啊
https://blog.csdn.net/u013440574/article/details/146447378
https://blog.csdn.net/2301_77717148/article/details/146208611
https://comfyui-wiki.com/zh/news/2025-04-25-flex-2-preview-released
https://comfyui-wiki.com/zh/install/install-comfyui/install-comfyui-on-linux
2025-05-09 00:00:00
之前去日本的时候就想要一个可以记录全景的相机,一直没买,这次去越南,刚好赶上了,Insta 360 4.22发布新品,当晚就买了,23号就拿到了,25号就出发了。
平时不出门的时候,也能拿这个当作Su7的行车记录仪,Su7的行车视频不能直接导出(刚好在五一期间车机更新了1.7.0,竟然增加了这个快速导出分享给手机的功能,我服了)
https://www.insta360.com/cn/
选了个全能套装+256G官方SD卡,总价格4673,买的还是太匆忙了,后续发现很多东西没啥用,完全没必要买。
其他的东西大差不差,我本以为这东西都迭代5年了,应该还不错吧,实际体验发现还是很粗糙啊。
这个全景相机拍到的东西,你不能直接分享,你必须给他传到他们所谓的云空间里,你才能分享给其他人。
然后这个云空间,他要钱,而且不便宜,你要分享给别人就必须走这个流程,太弱智了,这样玩你生态怎么玩得起来啊。
云相册下载的照片,不会出现在已下载照片中,他这个已下载仅仅单方面指从相机下载到手机里,我服了,这么抽象的嘛。
换句话说,这个云相册里下载的照片,你保存到手机本地,你是无法用Insta360的APP打开的,你只能在他的云端去浏览,不能用本地软件去浏览,这是什么奇怪设定,你如果没网,那么此时你就无法预览全景照片了,就算他已经在本地了。
相机的开始拍摄,有两个按键都可以触发快速启动+各种拍摄模式,但是如果这个东西你是固定在肩头或者头上,或者其他位置的,你想快速开始,你就得手动去按,或者是你买他的配件,有个蓝牙配件可以遥控。但是如果你用手机,就不行,就必须得保持机器是开机状态,然后用wifi连相机,再去控制相机,而机器开机就只能手动或者是不关机,但是耗电很厉害。
而相机明明自带了蓝牙,就是不让你用手机蓝牙,直接控制他快速开始或者结束,就逼得你去买他的配件。
全景上,如果近距离,全景拼接还是有问题的,特别是如果距离镜头可能只有10cm不到的情况下,全景拼接基本100%出问题。
全景的下部分,也就是隐藏自拍杆的地方,如果手持,连手也会一起被扭曲,他不是切断式的扭曲,他就是把你手扭曲了,这个处理也很奇怪。
要特别注意,镜头要擦干净,否则全景拍的素材基本不能用,下雨就会直接影响到拍摄的素材呈现,虽然他防水了。
剪辑或者桌面浏览软件就是 Insta360 Studio,这个软件就更一言难尽了。
打开就卡卡的感觉,加载视频或者照片以后,全屏,背景会狂闪不止。
作为一个全景相机,如果你不用他的剪辑软件,就没有哪个软件可以用来快速浏览视频或者照片,就非得从剪辑软件里打开。
其次,剪辑软件里我竟然发现好像不能对整个镜头快速做矫正,比如我倾斜了15°,我想软件纠正一下,不行
https://community.insta360.com/section/3/post/67887/
他必须先k关键帧,然后才能修改镜头相关属性,而不能对素材本身整体做一个修改,奇葩。
Adobe Premiere Pro的插件有bug,会导致某些非全景视频的素材,在剪辑过程中异常崩溃
手机APP的AI剪辑,直接就不能用,任何视频都直接卡51%,然后再也不动了,噱头大于一切,纯废物。
这个全能套装,配件基本大部分都是无用的,感觉我买了像个傻子
114cm自拍杆,建议不要买,官方的子弹时间或者其他第三方的更好(可以开展,自立),这个功能很弱,价格又贵
镜头保护套,不知道为什么,明明是镜头保护罩,但是硅胶材质的内部灌胶口还是合模线,这个东西会刮镜头,这个东西还是对称的,两边都会刮,这是什么弱智设计啊。
标准保护镜,这个会影响水下拍摄,同时在某些情景下,会导致画面糊或者不正常。
电池,电池是需要多备一个,买的急,电池不单卖,只能买这个套装
多功能充电管家,其实就是一个充放电盒子,电池放进去就变成充电宝或者充电器了,实际用起来发现,好像也不是很有用
收纳包,这个最没用,有了镜头保护套,整机可以随便放,收纳包占用空间又大,实际就能收那么几个东西,太浪费了。
背包夹,由于官方没有背包夹这种配件,就从外面买了一个,这个还行可以360°调整角度,但是如果你的包不够重或者是这个肩带有点光滑,这个也有点挂不住。
上当了,Insta360这玩意配件可真多,你想要的功能,可能本体没有的,全都在配件上,配件一个个都不便宜,真是好刀法,配件大概有一百个,我服了