现象
vLLM版本0.3.3离线运行时,报类似下面形式的错误:
File "/usr/local/lib/python3.10/dist-packages/vllm/entrypoints/llm.py", line 109, in init
self.llm_engine = LLMEngine.from_engine_args(engine_args)
File "/usr/local/lib/python3.10/dist-packages/vllm/engine/llm_engine.py", line 391, in from_engine_args
engine = cls(*engine_configs,
File "/usr/local/lib/python3.10/dist-packages/vllm/engine/llm_engine.py", line 128, in init
self._init_workers()
File "/usr/local/lib/python3.10/dist-packages/vllm/engine/llm_engine.py", line 167, in _init_workers
get_ip(), get_open_port())
File "/usr/local/lib/python3.10/dist-packages/vllm/utils.py", line 181, in get_ip
s.connect(("dns.google", 80))
socket.gaierror: [Errno -2] Name or service not known
原因
原因是这一段代码:
def get_ip() -> str:
# try ipv4
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(("dns.google", 80)) # Doesn't need to be reachable
return s.getsockname()[0]
except OSError:
# try ipv6
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s.connect(("dns.google", 80))
return s.getsockname()[0]
这段代码的功能是获取本机ip地址。
解决办法
根据提示修改“/usr/local/lib/python3.10/dist-packages/vllm/utils.py”,注意不同环境下vLLM安装路径不同。
s.connect(("dns.google", 80)) # Doesn't need to be reachable
改成:
s.connect(("114.114.114.114", 80)) # Doesn't need to be reachable
这个bug会在vLLM 0.3.4修复。