從零開始部署Qwen3-8b大模型到本地

一、方法一(使用docker鏡像進行部署)

安裝Linux服務器,本機測試系統為Ubuntu系統;(帶有2張A100的GPU服務器)

思路為:使用docker部署python環境鏡像在此基礎上安裝vllm拉取Qwen3-8b模型

docker-compose.yml文件部分配置為:

services:images_name:build: ./buildimage: images_namecontainer_name: images_namerestart: alwaysruntime: nvidiaprivileged: trueenvironment:#  - CUDA_VISIBLE_DEVICES=1- HF_ENDPOINT=https://hf-mirror.com- HF_HUB_ENABLE_HF_TRANSFER=1ports:- xxxxx:22volumes:- ./data:/data- ./root:/roottty: truedeploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [gpu]restart_policy:condition: on-failuredelay: 5smax_attempts: 3window: 120s

啟動docker-compose文件后臺運行

#啟動docker-compose文件并后臺運行
docker-compose up -d
#查看啟動情況
docker-compose ps
#如果啟動失敗,則重新啟動命令
docker-compose restart
#如果配置修改或啟動錯誤,則需要down掉容器再次啟動
docker-compose down
docker-compose up -d

正常運行情況如下:

進入容器內進行操作:

docker exec -it vllm /bin/bash

激活base環境

. /opt/conda/etc/profile.d/conda.sh && conda activate base

第一步先更新conda

#更新conda
conda update conda 
#如果失敗了,也可更新anaconda
conda update anaconda 

部分conda命令以供參考

#查看conda版本

conda --version

#查看conda的環境配置

conda config --show

#設置清華鏡像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
#設置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#設置搜索時顯示通道地址
conda config --set show_channel_urls yes

#將conda自身更新到最新版本

conda update conda

#將整個Anaconda都更新到確保穩定性和兼容性的最新版本

conda update Anaconda

#創建虛擬環境

conda create -n env_name python=3.8

#創建虛擬環境的同時安裝必要的包

conda create -n env_name panda?python=3.10

#查看虛擬環境

conda env list
conda info -e
conda info --envs

#激活虛擬環境

conda activate env_name

#刪除虛擬環境

conda remove --name env_name --all

conda remove --name env_name? package_name

#退出虛擬環境

conda deactivate

這里為vllm創建一個虛擬環境vllm-env,并激活此環境

#創建虛擬環境
conda create -n vllm_env python=3.10
#激活虛擬環境
conda activate vllm_env
#安裝vllm
conda install vllm或#使用pip安裝
pip install vllm#部署Qwen3
vllm serve Qwen/Qwen3-8b

解決PackagesNotFoundError: The following packages are not available from的方法

將conda-forge添加到搜索路徑上

conda config --append channels conda-forge
  • 它告訴conda在搜索軟件包時也要在conda-forge channel上查看。
  • 然后你就可以嘗試利用如下命令再次安裝

如果不行,則需要直接在官網下載anaconda.org?;

注意:

  • 2025-04 中旬:vLLM 在 0.8.4 中合并了對 Qwen3 系列(含 8B、MoE 等)的核心適配 。

  • 2025-07-30:官方 Hugging Face 頁面明確給出 “vllm≥0.8.5 可直接部署” 的示例命令 。

需要注意的是,如果使用conda安裝vllm版本小于0.8.5則需要使用pip安裝最新的才可以使用,否則不兼容Qwen3,只要你的 vLLM 版本 ≥ 0.8.5(推薦直接用最新 0.9.x),Qwen3-8B 可以“一鍵啟動”。如果還停留在 0.8.0/0.8.1,請先升級再繼續。


二、方法二(分割線以下為物理機安裝,后續換為直接使用python進行安裝cuda驅動及vllm)

安裝工具

確保系統中安裝了必要的工具,如 wget(用于下載文件)和 bash(用于執行腳本)。您可以通過以下命令安裝這些工具:

sudo apt update && sudo apt install wget -y # Ubuntu/Debian

使用以下命令下載最新的 Anaconda 安裝腳本:

wget https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-x86_64.sh

請根據 Anaconda 官方網站上的最新版本替換鏈接中的文件名。

運行安裝腳本:

bash Anaconda3-2025.06-0-Linux-x86_64.sh

安裝過程中,您需要:

  • 閱讀并接受許可協議。

  • 確認安裝路徑(默認為 ~/anaconda3)。

  • 完成安裝后,選擇是否初始化 Anaconda。

初始化 Anaconda

如果在安裝時選擇了初始化,安裝程序會自動配置環境變量。如果沒有選擇,可以手動運行以下命令完成初始化:

~/anaconda3/bin/conda init

在終端中運行以下命令激活 Conda 環境:

source ~/.bashrc

使用 Conda 創建一個新的虛擬環境以隔離開發項目:

conda create --name vllm_env python=3.10
  • vlln_env是虛擬環境的名稱,您可以根據需要更改。

  • python=3.10指定了 Python 版本。

激活環境:

conda activate vllm_env

安裝vllm并啟動

pip install vllmvllm serve Qwen/Qwen3-8B \--port 8000 \--max-model-len 4096

退出環境:

conda deactivate

在虛擬環境中,您可以使用 condapip 安裝所需的庫。例如:

conda install numpy pandas matplotlibpip install flask django

Anaconda 默認集成了 Jupyter Notebook,這是數據科學開發的重要工具。安裝并啟動 Jupyter Notebook:

conda install jupyterjupyter notebook

瀏覽器會自動打開 Jupyter Notebook 界面,您可以在其中編寫和運行 Python 代碼。

如果需要將環境遷移到其他設備,可以導出當前環境的配置:

conda env export > environment.yml

在新設備上,通過以下命令恢復環境:

conda env create -f environment.yml

當某個環境不再需要時,可以刪除它以釋放空間:

conda remove --name vllm_env --all

Qwen3-4B下載

使用ModelScope下載并啟動Qwen3-4B,在此之前要先pip install modelscope,也可以不安裝modelscope刪除VLLM_USE_MODELSCOPE=true直接下載模型啟動

VLLM_USE_MODELSCOPE=true vllm serve Qwen/Qwen3-8B --enable-reasoning --reasoning-parser deepseek_r1 --tensor-parallel-size 4

在下載前,請先通過如下命令安裝ModelScope

pip install modelscope

下載完整模型庫

modelscope download --model Qwen/Qwen3-8B
# 啟動服務,開放 8000 端口
vllm serve /home/docker/projects/kayer/dir \--tensor-parallel-size 2 \--max-model-len 4096 \--reasoning-parser qwen3 \--port 7088 \--host 0.0.0.0

vLLM 官方不再集成 Gradio,需要 自己搭一個輕量前端(30 秒搞定):

pip install gradio requests

開放防火墻端口

ufw allow 8000/tcp

把下面腳本保存為 chat_ui.py 并運行:

import gradio as gr, requests, json
API = "http://localhost:7088/v1/chat/completions"def chat_fn(history):msgs = [{"role":"user","content":h[0]} for h in history] + \[{"role":"assistant","content":h[1]} for h in history[:-1]]msgs.append({"role":"user","content":history[-1][0]})r = requests.post(API, json={"model":"/data/models/Qwen3-8B","messages":msgs}, stream=False)return history + [[history[-1][0], r.json()["choices"][0]["message"]["content"]]]gr.ChatInterface(chat_fn).launch(server_name="0.0.0.0", server_port=7860)

運行python? chat_ui.py

瀏覽器訪問

http://<服務器IP>:7860

即可圖形化聊天。

更簡潔的步驟---直接一步到位

#!/usr/bin/env python3
"""
一鍵啟動 Qwen3-8B + Gradio WebUI
python run_qwen3.py
訪問 http://<服務器IP>:7861 即可聊天
"""import os
import subprocess
import time
import requests
import gradio as gr
from pathlib import Path# ============== 參數區(按需修改) ==============
MODEL_PATH   = "/home/docker/projects/kayer/dir"   # 本地權重目錄
TP_SIZE      = 2                                   # GPU 并行數
MAX_LEN      = 4096                                # 最大上下文
VLLM_PORT    = 8000                                # vLLM 后端端口
GRADIO_PORT  = 7861                                # 前端端口
HOST         = "0.0.0.0"
# ==============================================API = f"http://localhost:{VLLM_PORT}/v1/chat/completions"def start_vllm():"""后臺拉起 vLLM 服務"""cmd = ["vllm", "serve", MODEL_PATH,"--tensor-parallel-size", str(TP_SIZE),"--max-model-len", str(MAX_LEN),"--reasoning-parser", "qwen3","--port", str(VLLM_PORT),"--host", HOST]print("[INFO] Starting vLLM backend ...")# 輸出日志到當前目錄 vllm.loglog = open("vllm.log", "w")proc = subprocess.Popen(cmd, stdout=log, stderr=log)return procdef wait_vllm_ready(timeout=120):"""等待 vLLM /docs 可訪問"""for _ in range(timeout):try:requests.get(f"http://localhost:{VLLM_PORT}/docs", timeout=2)print("[INFO] vLLM backend ready.")returnexcept requests.exceptions.RequestException:time.sleep(1)raise RuntimeError("vLLM backend not ready in time")def chat_fn(message, history):messages = []for h in history:if len(h) == 2:messages.append({"role": "user", "content": h[0]})messages.append({"role": "assistant", "content": h[1]})messages.append({"role": "user", "content": message})resp = requests.post(API, json={"model": MODEL_PATH,"messages": messages,"temperature": 0.7,"max_tokens": 1024}, timeout=60)resp.raise_for_status()return resp.json()["choices"][0]["message"]["content"]def main():# 1. 啟動后端vllm_proc = start_vllm()try:wait_vllm_ready()# 2. 啟動前端demo = gr.ChatInterface(fn=chat_fn,title="Qwen3-8B Chat",type="messages")demo.launch(server_name=HOST, server_port=GRADIO_PORT)finally:vllm_proc.terminate()if __name__ == "__main__":main()

三、常見問題及解決方案

安裝完成后無法激活環境?

確保執行了初始化命令 conda init 并重啟了終端。

遇到依賴沖突問題?

使用以下命令解決:

conda update --all

需要額外支持 GPU 的包?

可通過安裝 conda install -c nvidia cudatoolkit 獲得 GPU 加速支持。

更換鏡像源

 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes

直接創建并編輯編輯conda的配置文件.condarc

使用以下命令創建conda配置文件:.condarc文件是用戶主目錄下的一個隱藏文件。可在其中編寫以下內容:

channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- defaults
show_channel_urls: true

CUDA 版本兼容的 vLLM 版本

vLLM wheel 標簽要求最低 NVIDIA 驅動備注
+cu118≥ 525.60CUDA 11.8
+cu121≥ 535.54CUDA 12.1
+cu126≥ 550.54CUDA 12.6
+cu128≥ 570.86CUDA 12.8(官方默認,支持 Blackwell B200/GB200)

部署成功,測試正常。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92047.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI產品經理如何理解和應用Transformer架構,以提升產品的技術能力和用戶體驗?

?你好&#xff0c;我是 ?三橋君? 助你邁向AGI時代&#xff01;&#xff01;&#xff01; &#x1f4cc;本文介紹&#x1f4cc; >> 一、引言 在當今的AI浪潮中&#xff0c;Transformer架構已不再是一個陌生的技術名詞。從OpenAI的GPT系列到Google的BERT&#xff0c;再…

數據結構(四)內核鏈表、棧與隊列

一、內核鏈表基礎1. 什么是 Linux 內核鏈表&#xff1f;Linux 內核鏈表是一種高效的 雙向循環鏈表&#xff0c;廣泛應用于內核模塊開發中&#xff0c;用于管理數據結構。每個節點通過指針連接前一個和后一個元素&#xff0c;實現插入和刪除的高性能。2. 鏈表的定義與初始化在 L…

軟考信息安全工程師11月備考

目前是在職備考&#xff0c;主業是移動端開發工程師。第一個月(8.4-9.6)&#xff0c;將分享完下面所有章節內容&#xff0c;平均不到兩天更新一節1.網絡信息安全概述2.網絡攻擊原理與常用方法3.密碼學基本理論4.網絡安全體系與網絡安全模型5.物理與環境安全技術6.認證技術與原理…

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片 聲明: 本文章中所有內容僅供學習交流使用,不用于其他任何目的,不提供完整代碼,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 本文章未經…

使用 input 上傳文件, 選擇文件后再次修改文件再上傳失敗( <input type=“file“ /> 自定義上傳)

業務實際需求&#xff1a;點擊【選擇】按鈕先選擇文件&#xff0c;展示文件的詳情&#xff1a;類型&#xff0c;大小&#xff0c;日期......點擊【上傳】按鈕這個時候才去上傳文件如圖&#xff1a;BUG復現&#xff1a;點擊上傳文件后發現xlsx文件有些數據沒填寫&#xff0c;然后…

Win11 下解決 VScode/Trae 插件加載慢, 整個 VScode/Trae 很卡

最近在使用 Trae 寫代碼, 突然變得很卡, 尤其是插件系統, 比如我打開插件的面板, 以及比如我想預覽一下寫好的 .md 文件 (已安裝了 Markdown Preview Enhanced 插件), 這些都要好幾分鐘才能打開. 最初以為是 Trae 壞掉了, 然后重啟 Trae 不管用, 再重啟電腦居然也不管用, 接著…

微型導軌:智能家居抽屜的智能化應用

當智能家居從“功能堆砌”轉向“體驗升級”&#xff0c;微型導軌憑借超薄結構、靜音運行與精準定位能力&#xff0c;成為隱藏式設計、自動化交互的核心部件&#xff0c;讓家具“動”得優雅且可靠。智能掃地機器人&#xff1a;微型導軌被應用于邊刷的伸縮調節機構&#xff0c;能…

百套易語言教程、易語言視頻教程【易語言編程入門教程】

百套易語言教程、易語言視頻教程【易語言編程入門教程】 易語言輔助教程&#xff08;愛易編程論壇講師 24課講師&#xff1a;遠航 9課愛易編程論壇講師&#xff1a;愛易、小Call 8課&#xff09;.rar 時光論壇易語言全套教程【易語言零基礎易語言抓包易語言填表】完整版.rar 易…

nlp-詞匯分析

目錄 一、語言中的詞匯 1、詞的形態學 2、詞的詞性 二、詞語規范化 1、詞語切分 2、詞形還原 3、詞干提取 三、中文分詞 1、概述 2、基于最大匹配的中文分詞 3、基于線性鏈條件隨機場的中文分詞 4、基于感知器的中文分詞 詞序列預測 模型參數學習 特征定義 5、…

Kafka ISR機制和Raft區別:副本數優化的秘密

Kafka的ISR機制和像Raft這樣的傳統基于Quorum&#xff08;法定人數&#xff09;的協議之間的區別確實很微妙&#xff0c;但也非常重要。讓我們來分析一下為什么ISR可以減少所需的副本數量。在采用ISR模型和&#xff08;f1&#xff09;個副本數的配置下&#xff0c;一個Kafka分區…

新手向:GitCode疑難問題診療

Git疑難問題診療引言在軟件開發過程中&#xff0c;版本控制系統&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;而Git以其分布式架構、強大的分支管理能力和高效的性能成為行業標準。然而&#xff0c;隨著項目復雜度的提升&#xff0c;Git的使用也可能遇到各種疑難問…

電子電氣架構 ---如何煥新升級為 48V 電氣架構

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

JavaScript判斷數字方法

在JavaScript中&#xff0c;判斷一個值是否為數字有多種場景&#xff0c;以下是常見方法及適用情況&#xff1a;1. 嚴格判斷數字類型&#xff08;排除NaN&#xff09;使用 typeof 結合 !isNaN()&#xff0c;確保值是 number 類型且非 NaN&#xff1a;javascriptfunction isNumb…

C++編程之旅-- -- --始探門庭的求知漫溯(二)

目錄引用內聯函數(C11)auto關鍵字基于范圍的for循環指針空值---nullptr引用 引用&#xff1a;指將變量以另一個名稱來展現的。它并非是一個新變量而是一個別名&#xff0c;它們同指一塊內存空間。就如古時那些有字的人,亦或者是周樹人&#xff0c;你說魯迅是不是周樹人呢&…

wordpress網站的“管理員郵箱地址”有什么用?

在WordPress網站的“設置”-“常規”中設置的“管理員郵箱地址”有多種用途&#xff0c;以下是詳細介紹&#xff1a; 一、用戶注冊相關 密碼找回功能 當網站用戶忘記密碼時&#xff0c;他們會通過點擊登錄頁面上的“忘記密碼”鏈接來重置密碼。WordPress系統會向管理員郵箱地…

202506 電子學會青少年等級考試機器人六級實際操作真題

更多內容和歷年真題請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 六級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 202506 青少年等級考試機器人實操真題六級 一、實際操作 1. 主題&#xff1a;姿態傳感器交互步進電機左右…

Centos 安裝 redis

1.下載redis&#xff0c;這個自己去網上找吧。2.上傳文件&#xff0c;redis-7.4.1.tar.gz3.解壓&#xff1a;執行 tar -xf redis-7.4.1.tar.gz在進行安裝之前&#xff0c;檢查一下有沒有make、gcc、python3、沒有的話全部 yum install。安裝完之后&#xff0c;如果報一下錯誤&a…

算法訓練營DAY55 第十一章:圖論part05

并查集理論基礎 背景 當我們需要判斷兩個元素是否在同一個集合里的時候&#xff0c;我們就要想到用并查集。 并查集主要有兩個功能&#xff1a; 將兩個元素添加到一個集合中。判斷兩個元素在不在同一個集合 原理講解 從代碼層面&#xff0c;我們如何將兩個元素添加到同一個…

docker相關操作記錄

1.docker清理服務器上面沒有用到的鏡像#刪除本地鏡像 docker rmi $(docker images -q) #強制刪除本地鏡像 docker rmi $(docker images -q) -f2.docker查看日志docker logs c36c56e4cfa3 (容器id)3.所有運行或沒有運行的鏡像 docker ps -a4、停止container&#xff0c;這樣才…

LInux基礎學習筆記七

/dev/zero和/dev/null 是什么/dev/zero&#xff1a;一個零設備文件&#xff0c;讀取時會不斷返回\0字節&#xff08;零值字節&#xff09;&#xff0c;常用于創建空文件或格式化/dev/null&#xff1a;一個空設備文件&#xff0c;寫入它的內容會被丟棄&#xff0c;相當于“黑洞”…