当前位置: 首页 > news >正文

vllm -- 源码学习1(寻找源码入口) (小白级教程)

vllm服务的启动命令,通过启动命令去寻找源代码的入口。

source .venv/bin/activate vllm serve facebook/opt-125m --dtype=bfloat16

来看第一条命令source .venv/bin/activate(注: 一定要替换成自己的目录哟)。

这条命令用于激活本地用uv创建的虚拟环境。

因为vllm是通过uv进行安装的,所以要激活虚拟环境,才能直接使用vllm命令。

看下activate的源码。

if ! [ -z "${SCRIPT_PATH+_}" ] ; then _OLD_SCRIPT_PATH="$SCRIPT_PATH" fi # Get script path (only used if environment is relocatable). if [ -n "${BASH_VERSION:+x}" ] ; then SCRIPT_PATH="${BASH_SOURCE[0]}" if [ "$SCRIPT_PATH" = "$0" ]; then # Only bash has a reasonably robust check for source'dness. echo "You must source this script: \$ source $0" >&2 exit 33 fi elif [ -n "${ZSH_VERSION:+x}" ] ; then SCRIPT_PATH="${(%):-%x}" elif [ -n "${KSH_VERSION:+x}" ] ; then SCRIPT_PATH="${.sh.file}" fi deactivate () { unset -f pydoc >/dev/null 2>&1 || true # reset old environment variables # ! [ -z ${VAR+_} ] returns true if VAR is declared at all if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then PATH="$_OLD_VIRTUAL_PATH" export PATH unset _OLD_VIRTUAL_PATH fi if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" export PYTHONHOME unset _OLD_VIRTUAL_PYTHONHOME fi # The hash command must be called to get it to forget past # commands. Without forgetting past commands the $PATH changes # we made may not be respected hash -r 2>/dev/null if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then PS1="$_OLD_VIRTUAL_PS1" export PS1 unset _OLD_VIRTUAL_PS1 fi unset VIRTUAL_ENV unset VIRTUAL_ENV_PROMPT if [ ! "${1-}" = "nondestructive" ] ; then # Self destruct! unset -f deactivate fi } # unset irrelevant variables deactivate nondestructive VIRTUAL_ENV='/home/src/.venv' if ([ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]) && $(command -v cygpath &> /dev/null) ; then VIRTUAL_ENV=$(cygpath -u "$VIRTUAL_ENV") fi export VIRTUAL_ENV # Unset the `SCRIPT_PATH` variable, now that the `VIRTUAL_ENV` variable # has been set. This is important for relocatable environments. if ! [ -z "${_OLD_SCRIPT_PATH+_}" ] ; then SCRIPT_PATH="$_OLD_SCRIPT_PATH" export SCRIPT_PATH unset _OLD_SCRIPT_PATH else unset SCRIPT_PATH fi _OLD_VIRTUAL_PATH="$PATH" PATH="$VIRTUAL_ENV/bin:$PATH" export PATH if [ "xsrc" != x ] ; then VIRTUAL_ENV_PROMPT="src" else VIRTUAL_ENV_PROMPT=$(basename "$VIRTUAL_ENV") fi export VIRTUAL_ENV_PROMPT # unset PYTHONHOME if set if ! [ -z "${PYTHONHOME+_}" ] ; then _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" unset PYTHONHOME fi if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then _OLD_VIRTUAL_PS1="${PS1-}" PS1="(${VIRTUAL_ENV_PROMPT}) ${PS1-}" export PS1 fi # Make sure to unalias pydoc if it's already there alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true pydoc () { python -m pydoc "$@" } # The hash command must be called to get it to forget past # commands. Without forgetting past commands the $PATH changes # we made may not be respected hash -r 2>/dev/null || true

看起来这个文件很多很复杂,如果简单理解,这个文件的核心目的就是修改PATH环境变量。

把虚拟环境的系统目录放到PATH的最前面。

所以在你激活虚拟环境后,执行python、vllm这些命令时,系统会先从.venv/bin/目录下查找这些命令。

理解了第一个命令,再来看第二个命令vllm serve facebook/opt-125m --dtype=bfloat16。

自然而然就知道这个命令存放在.venv/bin/目录下。

也可以用which命令验证下,如下图。

来看下vllm文件中写了什么

#!/home/src/.venv/bin/python3 # -*- coding: utf-8 -*- import sys from vllm.entrypoints.cli.main import main if __name__ == "__main__": if sys.argv[0].endswith("-script.pyw"): sys.argv[0] = sys.argv[0][:-11] elif sys.argv[0].endswith(".exe"): sys.argv[0] = sys.argv[0][:-4] sys.exit(main())

逐行解释代码的含义。

import sys

导入 Python 系统模块,用来获取命令行参数、退出程序等。

from vllm.entrypoints.cli.main import main

从 vLLM 源码里,导入真正的主函数 main (),对应的源码vllm/entrypoints/cli/main.py。

if __name__ == "__main__":

用于判断是否直接运行了这段代码,如果别人import导入则不会执行后续逻辑。

if sys.argv[0].endswith("-script.pyw"):
sys.argv[0] = sys.argv[0][:-11]

elif sys.argv[0].endswith(".exe"):
sys.argv[0] = sys.argv[0][:-4]

对字符串进行截取

sys.exit(main())

最后一句,真正开始调用vllm的源码。

看完启动脚本所有源码。

所以总结,vllm的源码从vllm/entrypoints/cli/main.py开始看。

从下一遍笔记开始,就真正开始阅读vllm源码,心情无比激动(虽然进度有点缓慢)。

http://www.jsqmd.com/news/846095/

相关文章:

  • 深度测评|重庆名表上门回收谁靠谱?2026 首选合扬 - 奢侈品回收测评
  • 程序员必知的10个设计模式:从理论到代码的全面解析
  • LK220N10
  • 解密冰蝎和蚁剑:在CTF流量分析中如何识别和还原WebShell攻击(含AES/Base64解密实操)
  • 高效过滤新选择:品质保障压滤机江苏厂家推荐 - 品牌2025
  • 浙江宁波工作服定制厂家直供货源,劳保服定制厂家适合 长期拿货 - 奔跑123
  • 如何高效构建智能投资助手:韭菜盒子VSCode插件的7大核心功能深度解析
  • 为什么 router 不会出现赋值时没值,之后才有值的情况?
  • 官方认证|2026年云南五大正规职业装 / 学生校服 / 文体用品定制批发企业排名,向日葵综合实力遥遥领先 - 十大品牌榜
  • 秘鲁国际商标注册平台哪家最好?2026 代理机构资质 + 服务 + 费用测评 - 速递信息
  • 生成式 AI 的成本暗礁:FinOps 如何照亮从试点到规模化的全链路
  • 卸载工具-IObitUninstaller-Pro-v13.1.0.3下载地址及安装教程
  • DiffuGen:基于扩散模型的代码生成技术原理与应用前景
  • 从0到1的15个月:割草机器人研发通关全景
  • 岩棉板优缺点全解析:从住宅外墙到工业现场的真实视角 - 奔跑123
  • 2026年北京短视频代运营与AI搜索优化服务商深度评测:企业精准获客完整指南 - 企业名录优选推荐
  • 轻量级服务器配置分发工具cc-sdd:基于SSH的批量运维利器
  • 你的项目该用CSR还是SSR?从ToB后台到ToC电商的实战选型指南
  • Taotoken稳定直连与路由策略保障了我的线上服务SLA
  • 从YOLOX到RK3588:手把手教你用RKNN-Toolkit2完成模型转换与部署(含Python/C++完整代码)
  • 南京爱屋建筑防水:雨花台地下室防水找哪家 - LYL仔仔
  • 2026年北京抖音推广、GEO优化与短视频代运营服务商选型指南 - 企业名录优选推荐
  • 5步掌握AntiDupl.NET:终极免费图片去重工具,轻松释放硬盘空间
  • D2DX技术重生:3步让《暗黑破坏神2》在Windows 11重获新生
  • New API:企业级AI模型聚合网关的技术架构与成本优化解决方案
  • 如何将网易云音乐NCM文件转换为通用音频格式
  • 浙江宁波招投标工作服定制厂家,合规劳保服定制厂家政企优选 - 奔跑123
  • 2026年宁夏银川B2B企业获客与AI营销深度横评:短视频、GEO优化、智能体一站式解决方案 - 精选优质企业推荐官
  • 别再只用Prometheus了!手把手教你用Grafana直连MySQL做业务数据监控(附完整SQL和面板JSON)
  • 西安市长安区鑫宝通建筑:西安钢管架搭建广告公司 - LYL仔仔