01 - 在租用 GPU 上执行实测
前置:无。
本篇回答:手上没有 N 卡,想租一台机器跑一轮性能实测,机器怎么挑、活怎么派过去、哪些地方会「看起来没问题,其实已经错了」。
你想给一个模型做一轮性能测试,看看它到底慢在哪。手上是 台 Mac,没有 N 卡。于是去租一台带 GPU 的机器 —— 按小时算钱,几毛钱一小时,跑完就销毁。
听起来很简单:开机、把代码传上去、跑、把结果拷回来。但从「点下租用」到「拿到一份能信的数字」中间有六步,其中四步各埋着一个坑,而且都不报错:
上面一排是花钱的机时,下面四个虚线挂着的是白花的机时。四个坑分别在第 1.1、3.1、3.2、2.4 节。
下面按这条线走一遍。
一、选机器
1.1 先看依赖,再看价格
机器列表默认按价格排序,很容易顺手挑最便宜那台。但价格该排最后看。
卡在前面的是 CUDA 版本。深度学习的 Python 包(PyTorch、flash-attn 这些)装的不是源码,是已经编译好的二进制。它编译时针对哪个 CUDA 大版本,那一刻就定死了。机器上的 CUDA 版本对不上,import 那一行就直接报错 —— 不是「慢一点」,是根本起不来。
顺带说一个常见误解:CUDA 向后兼容、驱动新一点总能跑。这话对驱动成立,对这些编译好的包不成立。
所以第一步是打开项目的依赖清单,找包名里的 cu 后缀。以 sglang-omni 为例:
# 包名后缀直接写着目标 CUDA 主版本,这类命名本身就是「不兼容」的信号:
# 如果真的跨版本兼容,就不需要为每个 CUDA 版本单独发一个包
"flashinfer_python[cu13]==0.6.17"
"nixl-cu13>=1.1.0" # 注释里写明:通用的 nixl / -cu12 wheel 在 cu130 上会挂
"mooncake-transfer-engine-cuda13>=0.3.10" # 泛化版本会拉 cu12,导致 import mooncake 失败
三条全钉死在 CUDA 13,而不少平台的默认镜像还停在 12.x。这一条看走眼,要在装依赖上耗掉几小时机时才发现。