(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 格式。这是加载大规模模型时的典型过程,其中包括以下几个步骤:


发生了什么?

  1. 模型加载初始化
  • 每个日志行 Starting to load model defog/sqlcoder-70b-alpha... 表明多个进程(VllmWorkerProcess)同时开始加载模型。
  1. 选择权重格式
  • Using model weights format ['*.safetensors'] 表示模型权重是以 safetensors 格式存储的,这种格式通常比 PyTorch*.bin 格式更快更安全。
  1. 加载模型分片(Shards)
  • Loading safetensors checkpoint shards 是在逐个加载模型的检查点分片。
  • 日志 0% Completed | 0/29 和后续日志(如 3% Completed | 1/29)显示,模型被分成了 29 个分片,这些分片需要逐一加载到内存中。
  1. 加载速度日志
  • 每个分片的加载时间大约为 23.5 秒(如日志所示),总体加载时间与分片数量成正比。

为什么启动慢?

  1. 模型大小
  • sqlcoder-70b-alpha 是一个 70B 参数的模型(即有 700 亿个参数),通常需要数百 GB 的存储空间。加载这样的模型会非常耗时。
  1. 权重分片
  • 权重被切分为多个 safetensors 文件(如 29 个分片),每个分片需要独立加载到内存中。
  1. I/O 瓶颈
  • 如果模型文件存储在慢速磁盘(如 HDD 或 NFS 网络存储)上,加载时间会显著增加。
  1. 并发加载进程
  • 日志显示多个进程(VllmWorkerProcess)正在加载模型。这可能是为了并行化处理以提升推理性能,但初始加载阶段会占用额外的资源。
  1. GPU 初始化
  • 如果模型被加载到 GPU(特别是多个 GPU)上,初始化显存分配和张量格式转换也会增加时间。

如何优化启动速度?

  1. 优化存储设备
  • 使用 SSD 或 NVMe:确保模型权重文件存储在高速 SSD 或 NVMe 上,以减少 I/O 延迟。
  • 本地存储:避免使用网络文件系统(如 NFS),因为其吞吐量通常不足以支撑大模型加载。
  1. 减少分片数量
  • 如果可能,重新生成模型权重,将分片数减少到更小的数量(例如,将分片数量从 29 减少到 5 或更少)。这可以显著减少加载分片的时间开销。
  1. 优化并行加载
  • 确保多进程加载权重时不相互阻塞。例如,配置每个进程独立加载分片,或调整加载进程的数量。
  1. 分步加载
  • 如果支持,使用惰性加载(lazy loading)技术,仅在推理时加载必要的权重部分,而不是一次性加载整个模型。
  1. 检查内存和显存
  • 确保系统有足够的内存和显存。内存不足会导致分页,进一步拖慢加载速度。
  1. 改用精简模型
  • 如果加载时间仍不可接受,考虑使用小参数量的模型(如 7B 或 13B 参数模型),以减少初始加载时间。

下一步建议

  1. 检查存储性能
  • 使用工具(如 iostatdd)测量存储设备的读写性能,确保其 I/O 吞吐量足够高。
  1. 启用加载进度日志
  • 如果框架支持,启用更详细的日志记录(如加载文件名、时间分布等),便于排查加载瓶颈。
  1. 重启优化
  • 在服务重启频繁的情况下,考虑启用权重的缓存机制(如通过内存映射或磁盘缓存)。

通过这些优化,可以显著减少大模型的加载时间,从而加快服务启动速度。