(VllmWorkerProcess pid=15038) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15043) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15041) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15042) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15040) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15039) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15044) INFO 11-20 13:00:23 model_runner.py:915] Starting to load model defog/sqlcoder-70b-alpha...
(VllmWorkerProcess pid=15041) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
(VllmWorkerProcess pid=15043) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
(VllmWorkerProcess pid=15044) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
(VllmWorkerProcess pid=15040) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
(VllmWorkerProcess pid=15039) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
(VllmWorkerProcess pid=15038) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
(VllmWorkerProcess pid=15042) INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
INFO 11-20 13:00:24 weight_utils.py:236] Using model weights format ['*.safetensors']
Loading safetensors checkpoint shards: 0% Completed | 0/29 [00:00<?, ?it/s]
Loading safetensors checkpoint shards: 3% Completed | 1/29 [00:23<10:57, 23.48s/it]
Loading safetensors checkpoint shards: 7% Completed | 2/29 [00:46<10:34, 23.49s/it]
Loading safetensors checkpoint shards: 10% Completed | 3/29 [01:13<10:46, 24.88s/it]
这些日志信息表明,系统正在加载大型语言模型(defog/sqlcoder-70b-alpha
),并且模型权重使用的是 safetensors
格式。这是加载大规模模型时的典型过程,其中包括以下几个步骤:
发生了什么?
- 模型加载初始化:
- 每个日志行
Starting to load model defog/sqlcoder-70b-alpha...
表明多个进程(VllmWorkerProcess
)同时开始加载模型。
- 选择权重格式:
-
Using model weights format ['*.safetensors']
表示模型权重是以safetensors
格式存储的,这种格式通常比PyTorch
的*.bin
格式更快更安全。
- 加载模型分片(Shards):
-
Loading safetensors checkpoint shards
是在逐个加载模型的检查点分片。 - 日志
0% Completed | 0/29
和后续日志(如3% Completed | 1/29
)显示,模型被分成了 29 个分片,这些分片需要逐一加载到内存中。
- 加载速度日志:
- 每个分片的加载时间大约为 23.5 秒(如日志所示),总体加载时间与分片数量成正比。
为什么启动慢?
- 模型大小:
-
sqlcoder-70b-alpha
是一个 70B 参数的模型(即有 700 亿个参数),通常需要数百 GB 的存储空间。加载这样的模型会非常耗时。
- 权重分片:
- 权重被切分为多个
safetensors
文件(如29
个分片),每个分片需要独立加载到内存中。
- I/O 瓶颈:
- 如果模型文件存储在慢速磁盘(如 HDD 或 NFS 网络存储)上,加载时间会显著增加。
- 并发加载进程:
- 日志显示多个进程(
VllmWorkerProcess
)正在加载模型。这可能是为了并行化处理以提升推理性能,但初始加载阶段会占用额外的资源。
- GPU 初始化:
- 如果模型被加载到 GPU(特别是多个 GPU)上,初始化显存分配和张量格式转换也会增加时间。
如何优化启动速度?
- 优化存储设备:
- 使用 SSD 或 NVMe:确保模型权重文件存储在高速 SSD 或 NVMe 上,以减少 I/O 延迟。
- 本地存储:避免使用网络文件系统(如 NFS),因为其吞吐量通常不足以支撑大模型加载。
- 减少分片数量:
- 如果可能,重新生成模型权重,将分片数减少到更小的数量(例如,将分片数量从 29 减少到 5 或更少)。这可以显著减少加载分片的时间开销。
- 优化并行加载:
- 确保多进程加载权重时不相互阻塞。例如,配置每个进程独立加载分片,或调整加载进程的数量。
- 分步加载:
- 如果支持,使用惰性加载(lazy loading)技术,仅在推理时加载必要的权重部分,而不是一次性加载整个模型。
- 检查内存和显存:
- 确保系统有足够的内存和显存。内存不足会导致分页,进一步拖慢加载速度。
- 改用精简模型:
- 如果加载时间仍不可接受,考虑使用小参数量的模型(如 7B 或 13B 参数模型),以减少初始加载时间。
下一步建议
- 检查存储性能:
- 使用工具(如
iostat
或dd
)测量存储设备的读写性能,确保其 I/O 吞吐量足够高。
- 启用加载进度日志:
- 如果框架支持,启用更详细的日志记录(如加载文件名、时间分布等),便于排查加载瓶颈。
- 重启优化:
- 在服务重启频繁的情况下,考虑启用权重的缓存机制(如通过内存映射或磁盘缓存)。
通过这些优化,可以显著减少大模型的加载时间,从而加快服务启动速度。