内蒙古建设厅网站官网甘肃古典建设集团有限公司网站
内蒙古建设厅网站官网,甘肃古典建设集团有限公司网站,网站建设将来有什么发展,python编程软件pc1. 环境准备#xff1a;从零开始的WSL与CUDA基础
想在Windows上玩转大模型推理#xff0c;又不想折腾双系统或者虚拟机#xff0c;WSL#xff08;Windows Subsystem for Linux#xff09;绝对是你的最佳拍档。它让你在熟悉的Windows桌面环境下#xff0c;无缝拥有一个原生…1. 环境准备从零开始的WSL与CUDA基础想在Windows上玩转大模型推理又不想折腾双系统或者虚拟机WSLWindows Subsystem for Linux绝对是你的最佳拍档。它让你在熟悉的Windows桌面环境下无缝拥有一个原生的Linux终端用来部署像vLLM这样的高性能推理框架再合适不过了。我自己就是从双系统切过来的以前用移动硬盘装Ubuntu动不动就识别失败还得重启切换工作和娱乐的软件环境还得两套实在麻烦。WSL完美解决了这个问题让你“鱼与熊掌”可以兼得。不过在开干之前咱们得先把地基打牢。这个“地基”就是你的Windows和WSL环境。首先确保你的Windows是10或11的专业版、企业版或教育版家庭版可能需要额外步骤。然后WSL需要开启两个Windows功能“适用于Linux的Windows子系统”和“虚拟机平台”。你可以在PowerShell管理员身份里用一行命令搞定wsl --install。这条命令通常会帮你安装默认的Linux发行版比如Ubuntu。但我更推荐你先只启用功能然后去Microsoft Store手动挑选一个你喜欢的发行版比如Ubuntu 22.04 LTS这样版本更可控。装好WSL和Ubuntu之后第一件事不是急着装CUDA而是先更新系统。打开你的WSL终端就是那个Ubuntu运行sudo apt update sudo apt upgrade -y。这个习惯能避免很多因软件包过旧导致的依赖问题我踩过坑所以特别提醒你。接下来一个非常关键但容易被忽略的步骤是检查你的NVIDIA显卡驱动。是的在Windows上装而不是在WSL里。你需要在Windows环境下去NVIDIA官网下载并安装最新的Game Ready或Studio驱动。安装完成后在Windows的CMD或PowerShell里运行nvidia-smi。这个命令能成功执行并显示出你的显卡信息和驱动版本是后续所有步骤的前提。它证明了Windows系统本身已经能正确调用你的GPU了。注意nvidia-smi显示的“CUDA Version”是你当前显卡驱动支持的最高CUDA运行时版本不是你将要安装的CUDA Toolkit版本。比如显示“12.8”只代表你的驱动支持CUDA 12.8及以下版本我们完全可以选择安装vLLM兼容的12.1版本。最后建议在WSL的Ubuntu里创建一个专门的工作目录比如mkdir ~/vllm_project之后的所有操作都在这里进行方便管理。好了至此我们的基础操作系统环境就准备好了接下来要进入核心环节处理让无数人头疼的版本对齐问题。2. 版本对齐破解CUDA、PyTorch与vLLM的“三角难题”这是整个部署过程中最核心、也是最容易出错的部分。原始文章里那句总结是血泪经验vLLM编译版本、PyTorch的CUDA版本、系统CUDA Toolkit版本三者必须严格一致。我把它称为“三角难题”任何一个角对不上服务都跑不起来而且报错信息可能千奇百怪让你无从下手。我们来把这个“三角关系”彻底理清。首先说系统CUDA Toolkit。这是在WSL的Ubuntu里安装的它提供了最底层的CUDA编译器和运行时库比如nvcc、libcudart。你可以把它理解成GPU编程的“地基”。安装它不是为了给Windows用的而是给WSL里的Linux环境用的。很多人疑惑Windows主机要不要装根据我的实测和社区反馈Windows主机只需要安装正确的NVIDIA显卡驱动即可不需要安装完整的CUDA Toolkit。WSL会通过一个特殊的驱动接口直接调用Windows主机驱动来访问GPU但计算库需要自己在Linux环境里配。然后是PyTorch的CUDA版本。这是通过pip install torch时指定的版本例如torch2.5.1cu121。这个版本决定了PyTorch张量计算在运行时链接哪个版本的CUDA动态库。它必须和系统里安装的CUDA Toolkit版本匹配。如果你系统是CUDA 12.1却装了cu118的PyTorch那PyTorch就找不到对应的libcudart.so.12.1文件自然会报错。最后是vLLM的编译版本。vLLM是一个用C和CUDA写了大量高性能算子的框架它在打包成Python的wheel文件时是针对特定的CUDA版本进行编译的。例如你通过pip install vllm安装的0.7.3版本很可能默认就是针对CUDA 12.1cu121编译的。如果它和PyTorch、系统CUDA的版本不匹配在加载那些编译好的内核时就会直接崩溃。所以我们的作战目标非常明确统一锁定一个CUDA版本。鉴于vLLM 0.7.x对CUDA 12.1支持良好我们这里就以CUDA 12.1为例贯穿全程。在开始安装任何东西之前最好先画个简单的版本规划表在心里组件目标版本说明系统CUDA Toolkit12.1在WSL Ubuntu中安装PyTorch2.5.1cu121安装时指定CUDA 12.1版本vLLM0.7.3 (cu121)默认即针对CUDA 12.1编译接下来我们就一步步把这个规划变成现实。2.1 在WSL中安装指定版本的CUDA Toolkit别去NVIDIA官网直接下runfile安装包对于WSL环境我推荐使用更干净的apt仓库安装方式能更好地管理版本和依赖。添加NVIDIA官方仓库# 首先安装一些基础工具 sudo apt install -y wget software-properties-common # 下载并添加NVIDIA包仓库的密钥 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb # 更新软件包列表 sudo apt update安装CUDA Toolkit 12.1 现在我们可以直接安装特定版本的CUDA。注意这里安装的是cuda-toolkit-12-1这个元包。sudo apt install -y cuda-toolkit-12-1这个命令会安装CUDA 12.1系列的所有必要工具和库包括nvcc编译器。验证安装并配置环境变量 安装完成后先直接尝试运行/usr/local/cuda-12.1/bin/nvcc -V。如果能正确输出CUDA 12.1的版本信息说明安装成功了但系统还找不到它。我们需要把CUDA的路径加入到环境变量中让终端随时可以调用。编辑你的~/.bashrc文件如果你用的是zsh则是~/.zshrcvim ~/.bashrc在文件末尾添加以下几行export PATH/usr/local/cuda-12.1/bin${PATH::${PATH}} export LD_LIBRARY_PATH/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}} export CUDA_HOME/usr/local/cuda-12.1保存退出后执行source ~/.bashrc让配置立即生效。现在再运行nvcc -V应该就能在任意路径下看到正确的版本输出了。提示如果你之前安装过其他版本的CUDA可能会遇到nvcc -V版本不对的问题。这时可以用whereis nvcc或which nvcc查看当前指向的是哪个路径。通常/usr/local/cuda是一个软链接指向实际安装的版本如cuda-12.1。你可以用ls -l /usr/local/cuda查看其指向如果不对可以手动调整这个软链接或者像上面一样在环境变量中直接指定绝对路径cuda-12.1这样最稳妥。2.2 安装与CUDA版本匹配的cuDNNcuDNN是NVIDIA深度神经网络加速库很多AI框架包括PyTorch和vLLM的底层都会用到它。虽然有些情况下PyTorch的wheel包可能自带了所需版本的cuDNN但为了绝对稳定手动安装匹配的cuDNN是一个好习惯。下载cuDNN你需要去NVIDIA开发者网站下载cuDNN这需要注册一个账号用个人邮箱即可。找到对应CUDA 12.x的版本例如 cuDNN 8.9.x for CUDA 12.x。选择“Tar Archive”格式的Linux版本下载。安装cuDNN假设你下载的文件是cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz把它放到WSL的文件系统里比如~/目录下然后执行以下命令# 解压归档文件 tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz # 复制头文件 sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/* /usr/local/cuda-12.1/include/ # 复制动态链接库 sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/* /usr/local/cuda-12.1/lib64/ # 为库文件创建软链接可选但有时需要 cd /usr/local/cuda-12.1/lib64 sudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8 sudo ln -sf libcudnn.so.8 libcudnn.so # 更新动态链接库缓存 sudo ldconfig完成这些步骤后cuDNN就安装好了。它没有独立的版本检查命令但只要文件复制到了正确位置后续框架就能找到它。3. 构建Python环境与安装依赖系统层的CUDA和cuDNN准备好后我们就要在用户层搭建一个独立的Python环境来安装PyTorch和vLLM。强烈建议使用虚拟环境这能避免包冲突也方便你未来管理不同项目。我习惯用Python自带的venv轻量又直接。3.1 创建并激活虚拟环境首先确保你的WSL Ubuntu里安装了合适版本的Python和venv模块。Ubuntu 22.04默认的Python 3.10就很好。# 安装必要的Python工具 sudo apt install -y python3-pip python3.10-venv # 进入你的项目目录 cd ~/vllm_project # 创建名为‘venv’的虚拟环境 python3 -m venv venv # 激活虚拟环境 source venv/bin/activate激活后你的命令行提示符前面应该会出现(venv)字样这表示你已经在虚拟环境里了。之后所有的pip install操作都只影响这个环境。3.2 安装指定CUDA版本的PyTorch这是最关键的一步也是原始文章里提到的最大“坑点”。如果你直接用pip install vllm它会自动安装一个与其兼容的PyTorch版本但这个版本很可能和你系统里的CUDA版本对不上。所以我们必须先手动安装正确版本的PyTorch。根据我们之前的规划我们要安装CUDA 12.1版本的PyTorch。访问PyTorch官网在安装命令生成器里选择PyTorch Stable (2.5.1)、Linux、Pip、Python、CUDA 12.1。你会发现它生成的命令可能直接就是cu121的。但有时官网的命令可能不是最新的或者下载慢。这里我分享一个直接可靠的方法# 在激活的虚拟环境中执行 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这条命令会从PyTorch的CUDA 12.1专用频道安装最新的稳定版。如果下载速度慢可以临时使用国内镜像源比如清华源但需要确保镜像站有对应的cu121包。更稳妥的办法是先用上面的命令让pip开始下载然后中断CtrlC从输出的URL里复制出torch的whl文件链接用下载工具如wget或curl单独下载再用pip install ./torch-xxx.whl进行本地安装。安装完成后务必进行验证python -c import torch; print(torch.__version__); print(torch.cuda.is_available())如果输出类似2.5.1cu121和True那么恭喜你PyTorch已经正确识别并链接到了你的CUDA 12.1环境。如果显示False那说明PyTorch的CUDA版本和系统CUDA版本不匹配需要回头检查。3.3 安装vLLM并验证兼容性PyTorch就位后安装vLLM就简单多了。因为我们已经确保了底层环境的一致性vLLM的预编译轮子wheel应该能无缝对接。pip install vllm这个命令会安装vLLM及其所有Python依赖。安装过程可能会编译一些扩展时间稍长耐心等待即可。安装完成后不要急着用复杂模型测试。我们先做一个最简单的健康检查验证vLLM的核心CUDA功能是否正常。我们可以写一个极简的Python脚本来加载一个微型模型或者只是尝试初始化引擎但更直接的方法是检查vLLM能否导入并看到GPUpython -c from vllm import LLMEngine; import torch; print(PyTorch CUDA可用:, torch.cuda.is_available()); print(GPU数量:, torch.cuda.device_count())如果一切正常你会看到PyTorch CUDA可用为True并且GPU数量至少为1。这证明vLLM所依赖的PyTorch CUDA环境是健康的。至此“三角难题”已经被我们完美破解三个组件的版本牢牢锁定在CUDA 12.1上。4. 启动服务与实战验证环境全部配好终于到了最激动人心的环节启动vLLM服务并让它真正为我们跑一个模型。这里我们以启动一个兼容OpenAI API格式的HTTP服务为例这是最常用、也最方便的部署方式。4.1 准备模型文件vLLM支持Hugging Face格式的模型。你需要提前将模型下载到本地。由于网络原因直接从Hugging Face拉取可能很慢。我推荐以下几种方式使用镜像站在WSL里设置HF镜像环境变量export HF_ENDPOINThttps://hf-mirror.com然后用huggingface-cli download命令下载。先在国内环境下载在网络条件好的机器上用git lfs或下载工具将整个模型仓库如Qwen/Qwen2.5-1.5B-Instruct下载下来然后拷贝到WSL的文件系统中。WSL可以直接访问Windows的磁盘路径是/mnt/c/、/mnt/d/等所以你可以把模型放在Windows盘里在WSL中直接指向该路径。假设我们已经把Qwen2.5-1.5B-Instruct这个模型下载到了/mnt/d/Models/Qwen2.5-1.5B-Instruct目录下。4.2 启动vLLM OpenAI API服务器在虚拟环境中使用vllm serve命令启动服务。这是一个功能强大的命令有很多参数可以调整。我们从一个最基本的命令开始vllm serve /mnt/d/Models/Qwen2.5-1.5B-Instruct --host 0.0.0.0 --port 8000serve: 启动API服务。模型路径: 指定你下载的模型目录。--host 0.0.0.0: 允许从其他设备比如你Windows上的浏览器或脚本访问这个服务。--port 8000: 指定服务监听的端口。执行这个命令后vLLM会开始加载模型。你会看到大量的日志输出包括加载进度、模型配置、以及最重要的——GPU内存分配情况。如果看到类似“Using GPU memory pool”和“Model loaded”这样的成功信息并且没有出现CUDA相关的错误那么服务就启动成功了它默认会在http://localhost:8000提供一个兼容OpenAI API的接口。4.3 进行推理测试服务跑起来后我们开一个新的WSL终端窗口同样需要激活虚拟环境或者直接在Windows上用curl或 Python脚本来测试一下。使用curl测试curl http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d { model: Qwen2.5-1.5B-Instruct, prompt: 中国的首都是, max_tokens: 50, temperature: 0.1 }使用Python脚本测试from openai import OpenAI client OpenAI( api_keytoken-abc123, # vLLM默认不需要token但客户端需要填一个 base_urlhttp://localhost:8000/v1 ) response client.completions.create( modelQwen2.5-1.5B-Instruct, prompt法国的首都是, max_tokens50 ) print(response.choices[0].text)如果测试成功你会得到模型生成的文本。这证明从环境配置、模型加载到推理计算的完整链路都已经打通。你可以尝试调整vllm serve的参数比如--tensor-parallel-size来利用多GPU--max-model-len来控制上下文长度--gpu-memory-utilization来调整GPU内存使用率以优化性能和资源占用。4.4 常见启动问题排查即使按照指南一步步来有时也可能遇到问题。这里列举几个我遇到过的典型情况端口被占用如果8000端口被其他程序用了换一个端口比如--port 8080。GPU内存不足这是最常见的问题。如果模型太大加载时会报CUDA out of memory错误。可以尝试使用更小的模型。在vllm serve命令中添加--gpu-memory-utilization 0.9默认0.9可以调低到0.8或0.7让vLLM更保守地使用内存。启用--swap-space 8单位GB在系统内存中开辟一部分交换空间但会显著降低速度。模型格式错误确保模型路径正确并且是完整的Hugging Face格式包含config.json,model.safetensors或pytorch_model.bin等文件。服务启动后无响应检查日志是否有错误。有时模型第一次加载需要编译内核时间较长耐心等待。也可以尝试在命令中加入--disable-custom-all-reduce等参数来排查是否特定优化导致的问题。整个过程走下来你会发现最关键的还是第二章的版本对齐。只要那一步稳了后面的服务启动和推理就是水到渠成的事情。在WSL里部署vLLM既享受了Windows的便利生产力工具和图形界面又获得了Linux下干净高效的开发与部署环境对于个人学习和开发调试来说确实是一个非常理想的方案。