開源大模型本地部署

一、大模型

T5\BERT\GPT → Transformer的兒子→自注意力機制+神經網絡

大模型, Large Model,是指參數規模龐大、訓練數據量巨大、具有強泛化能力的人工智能模型,典型代表如GPT、BERT、PaLM等。它們通常基于深度神經網絡,特別是Transformer架構,在自然語言處理、圖像識別、代碼生成等任務中表現出色。

1、基本概念

大模型是指在超大規模數據集上訓練、擁有數十億到千億以上參數的人工智能模型,具備多任務、多模態能力,并能通過少量樣本甚至零樣本完成新任務。

2、主要特征

大模型具備以下特征:

- 參數規模大
? 數億至數千億參數,容量決定了模型的表達與泛化能力。
- 數據訓練量大
? 利用海量文本、圖像、音頻等多模態數據訓練,提升模型的通用性。
- 基于Transformer
? 多數大模型采用Transformer作為基礎結構,具備強大的表示學習能力。
- 強泛化與遷移能力
? 一次訓練,多場景復用(如ChatGPT既能對話,也能寫代碼、改文案)。
- 具備“涌現能力”
? 模型規模突破某個閾值后,表現出超越訓練目標的智能行為(如邏輯推理、復雜生成)。
- 可調優能力強
? 支持微調(Fine-tuning)、提示學習(Prompt Learning)、參數高效調優(LoRA、Adapter等)。
- 多模態發展趨勢
? 從純文本模型發展到圖文、語音、視頻等多模態大模型,如GPT-4V、DeepSeek、Grok等

3、應用方向

  1. Agent智能體(AI管家)

    • 概念:像一個“全能私人助理”,能自己分析問題、拆解任務、調用工具解決問題。

    • 例子:你想周末去露營,告訴它:“幫我找個離市區近、能帶寵物、有燒烤區的露營地,訂周六的房間,再推薦附近超市買食材。”它自動完成:搜攻略 → 篩選地點 → 查天氣 → 訂營地 → 生成購物清單 → 發到你手機。

    • 好處:不用自己一步步操作,AI能“動腦子”幫你搞定復雜任務。

    • 流程:用戶輸入 -> 拆解任務 -> 意圖識別 -> 調用對應的函數并執行 -> 完成執行

  2. 語音聊天助手(會聊天的AI)

    • 概念:像“升級版Siri”,能自然對話、理解語氣,甚至模擬真人情感。

    • 例子:你開車時說:“我好困啊,來點提神的音樂,再導航到最近的咖啡店。”它回答:“馬上切到搖滾歌單!前方500米有星巴克,要幫你點一杯冰美式嗎?”(還能學你喜歡的說話風格)

    • 好處:不用打字,動動嘴就能聊天、查信息、控制智能家居,像有個“隨身陪聊”。

    • 流程:語音輸入 -> 語音識別轉文字 -> 大模型對話 -> 文本轉語音 -> 完成對話

  3. 醫學客服(AI健康小助手)

    • 概念:醫院的“虛擬前臺”,能解答常見問題、提醒用藥、分診建議。

    • 例子:你半夜胃疼,打開醫院APP問:“吃了火鍋后胃痛,該掛哪個科?現在能吃什么藥緩解?”AI回答:“建議掛消化內科,暫時可服用XX藥(非處方)。若嘔吐加重,請立即急診。”并推送附近24小時藥店。

    • 好處:24小時在線,快速解答小毛病,避免排隊問醫生,隱私問題也能匿名咨詢。

    • 流程:問題輸入 -> 檢索知識庫 -> 問題拼接 -> 大模型對話 -> 給予回復

4、開發流程

大模型開發是一個系統工程,涉及數據、模型、算力、訓練、部署、安全與迭代等多個環節。

  • 任務定義與需求分析

    • 明確應用場景(如對話、寫作、推薦、圖像識別等)

    • 選擇模型類型(NLP、CV、多模態等)

  • 數據準備與預處理

    • 收集高質量、大規模數據(文本、圖像、音頻等)

    • 去噪清洗、標注、格式轉換、去重與分詞等

  • 模型設計與選擇

    • 選擇合適的模型架構(如GPT、BERT、ViT、T5等)

    • 設定層數、寬度、注意力機制等結構參數

  • 訓練策略與資源配置

    • 分布式訓練/混合精度訓練

    • 使用大規模算力資源(GPU/TPU集群)

    • 設置優化器(AdamW)、學習率調度等參數

  • 評估與調優

    • 評估指標:PPL、準確率、BLEU、ROUGE、F1等

    • 微調/指令調優(Instruction tuning)/RLHF等方法提升效果

  • 推理部署與壓縮優化

    • 部署到服務器或邊緣端(云部署、API服務)

    • 模型量化、裁剪、蒸餾、MoE等手段提升推理效率

  • 安全機制與合規檢測

    • 防止生成有害/敏感內容

    • 對輸出進行內容審查、對抗樣本防御、模型水印等

  • 持續迭代與生態構建

    • 基于用戶反饋持續優化

    • 構建插件系統、開發者平臺等生態體系

5、關鍵要點

  • 在大模型應用開發時,不會從頭開始構建一個新的模型,基于已有基座模型進行二次開發是行業主流實踐。

  • 選用已有的基座模型,并采用相應的技術手段優化大模型,如:微調,RAG,并行推理等。

  • 選用流行且成熟的框架,通過參數調整和功能集成實現業務需求,避免重復造輪子。

6、項目介紹

  • 簡歷

  • 項目框架

  • 三個模塊

    • 大語言模型(LLM)--實現大語言模型的對話功能:大模型的本地部署,微調訓練,流式對話,多輪對話。

    • RAG技術--增強大語言模型的對話能力:文本分割,文本嵌入,知識檢索

    • 知識圖譜--實現數據的高效存儲:neo4j數據庫,三元組抽取,實體對齊

  • 項目展示

二、LLM

開始實際案例的展示......

1、API調用

大模型通過API調用是目前最常見、最便捷的使用方式,用戶無需訓練模型,只需調用接口即可享受強大的 AI 能力,比如文本生成、翻譯、圖像識別、代碼補全等。

1.1 基本流程

  • 獲取 API 權限

    • 注冊平臺賬號(如 OpenAI、DeepSeek、阿里通義、訊飛星火等)

    • 獲取 API KeyAccess Token

  • 準備請求參數

    • 選擇模型

    • 設置請求體

  • 發起 API 請求

    • 使用編程語言(如 Python、JavaScript)通過 HTTP 協議調用接口

  • 解析響應結果

    • 獲取模型返回內容(如文本、圖片鏈接、結構化數據等)

    • 可與前端、應用系統集成使用

1.2 基本特征

大模型API調用將復雜的模型能力簡化為標準化服務,核心價值在于:

  • 降低使用門檻:無需本地部署千億參數模型,節省硬件與運維成本。

  • 靈活適配場景:通過參數調節和上下文學習快速滿足業務需求。

  • 規模化支持:依托云計算實現高可用、低延遲的企業級服務。

1.3 DeepSeek實操

DeepSeek作為國內優秀的LLM平臺,是一個不錯的選擇~

1.3.1 準備工作
  • 訪問deepseek官網,并注冊賬號:DeepSeek官網

  • 注冊賬號并且充值

  • 創建API-key

    僅在創建時可見可復制

  • 查看使用手冊

1.3.2 非流式輸出

等模型生成完整結果后一次性返回,適合短文本、結構化內容提取等任務。

  • 特點

    • 優點:

      • 使用簡單,一次性拿到完整結果

      • 適合分析處理、摘要抽取、短文本問答等

    • 缺點:

      • 響應時間長,特別是文本很長時

      • 體驗較差,用戶需要等待全部生成完才能看到內容

  • 環境安裝

    pip install openai
  • 非流式輸出

    # Please install OpenAI SDK first: `pip3 install openai`
    from openai import OpenAI
    ?
    client = OpenAI(api_key="sk-f9deff6faca64899a3faaaf1f4c53d1d", base_url="https://api.deepseek.com"
    )
    ?
    response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "明月幾時有"},],stream=False,
    )
    ?
    print(response.choices[0].message.content)
    ?
  • 輸出結果

    “明月幾時有”是蘇軾《水調歌頭·明月幾時有》中的名句,全文如下:
    ?
    **《水調歌頭·明月幾時有》** ?
    明月幾時有?把酒問青天。 ?
    不知天上宮闕,今夕是何年。 ?
    我欲乘風歸去,又恐瓊樓玉宇,高處不勝寒。 ?
    起舞弄清影,何似在人間。 ?
    ?
    轉朱閣,低綺戶,照無眠。
    不應有恨,何事長向別時圓?
    人有悲歡離合,月有陰晴圓缺,此事古難全。
    但愿人長久,千里共嬋娟。
    ?
    ### 賞析:
    1. **背景**:此詞作于宋神宗熙寧九年(1076年)中秋,蘇軾在密州(今山東諸城)任職時,懷念弟弟蘇 轍而寫。
    2. **情感**:以月起興,圍繞中秋明月展開想象,交織人間情懷與宇宙哲思,既有對親人的思念,又有對 人生無常的豁達。
    3. **名句**:- “人有悲歡離合,月有陰晴圓缺”道出世事無常的常態。- “但愿人長久,千里共嬋娟”成為表達遠方親友平安共勉的千古絕唱。
    ?
    ?
    ### 小知識:
    這首詞被譽為“中秋詞之冠”,后曾被改編為經典歌曲(如王菲演唱的《但愿人長久》)。若您想進一步探討其文學手法或創作背景,可以隨時告訴我!
1.3.3 流式輸出

服務器將響應內容一段一段地實時返回,適合長文本、對話、寫作等需要即時反饋的場景。

  • 特點

    • 優點

      • 響應快:無需等全部生成完畢,先生成先返回

      • 體驗佳:像人打字一樣流暢,常用于對話機器人

      • 可中斷:用戶可隨時打斷流式響應過程

    • 缺點

      • 編程稍復雜,需要處理數據流拼接

      • 不易直接使用普通 HTTP 請求工具(如 Postman)

  • 原理

  • 流式推理的實現—生成器

    import time
    ?
    def test(): ?# 生成器函數for i in range(10):time.sleep(1)yield i ?# 生成器函數,使用yield關鍵字返回值
    ?
    if __name__ == "__main__":aaa = test()print(aaa) ?# aaa是一個生成器,可以想象成一個隊列,每讀取一次,就會執行一次函數體for a in aaa:print(a) ?# 讀取生成器中的值
  • 流式推理代碼編寫:

    from openai import OpenAI
    ?
    client = OpenAI(api_key="sk-f9deff6faca64899a3faaaf1f4c53d1d", base_url="https://api.deepseek.com"
    )
    ?
    response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "明月幾時有"},],stream=True,
    )
    ?
    # 流式輸出
    out = []
    for chunk in response:print(chunk.choices[0].delta.content)out.append(chunk.choices[0].delta.content)print('-' * 10)print(''.join(out))
    ?
1.3.4 總結對比
項目流式輸出非流式輸出
返回方式邊生成邊返回全部生成后一次返回
響應速度慢(尤其是長文本)
使用體驗更自然(打字式)等待過程較長
編程復雜度稍復雜(需拼接)簡單
適用場景對話生成、直播問答簡短回復、結構化處理
1.3.5 代碼封裝

將代碼封裝為類,方便其他文件調用此功能。

非流式輸出:

from openai import OpenAI
?
class DeepseekAPI:def __init__(self, api_key): ?# 初始化方法self.api_key = api_key ?# API密鑰self.client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com") ?# 實例化OpenAI客戶端
?def inference(self, messages):response = self.client.chat.completions.create(model="deepseek-chat",messages=messages, ?# 消息內容stream=False, ?# 設置為False以獲取完整響應)return response.choices[0].message.content ?# 返回完整響應
?
?
# 測試代碼
if __name__ == "__main__":api_key = "sk-f9deff6faca64899a3faaaf1f4c53d1d" ?# API密鑰messages = [{"role": "system", "content": "你是一名AI助手"},{"role": "user", "content": "請簡要介紹一下你自己"},] ?# 定義消息內容stream = False ?# 設置為True以獲取流式輸出,False以獲取完整響應deepseek_api = DeepseekAPI(api_key) ?# 實例化DeepseekAPI類result = deepseek_api.inference(messages) ?# 調用推理方法print(result) ?# 打印響應內容
?

流式輸出:

# 流式輸出:
from openai import OpenAI
?
class DeepseekAPI:def __init__(self, api_key): ?# 初始化方法self.api_key = api_key ?# API密鑰self.client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com") ?# 實例化OpenAI客戶端
?def inference(self, messages):response = self.client.chat.completions.create(model="deepseek-chat",messages=messages, ?# 消息內容stream=True, ?# 設置為False以獲取完整響應)for chunk in response: ?# 遍歷響應的每個塊if chunk.choices: ?# 如果塊中有返回內容content = chunk.choices[0].delta.content ?# 獲取內容yield content ?# 逐塊返回內容
?
# 測試代碼
if __name__ == "__main__":api_key = "sk-f9deff6faca64899a3faaaf1f4c53d1d" ?# API密鑰messages = [{"role": "system", "content": "你是一名樂于助人的人工智能助手"},{"role": "user", "content": "請簡要介紹一下你自己"},] ?# 定義消息內容stream = False ?# # 設置為True以獲取流式輸出,False以獲取完整響應deepseek_api = DeepseekAPI(api_key) ?# 實例化DeepseekAPI類result = deepseek_api.inference(messages) ?# 調用推理方法for chunk in result: ?# 遍歷響應的每個塊print(chunk, end="") ?# 打印每個塊的內容
?

三、大模型本地部署

各種大模型

國內:ModelScope 魔搭社區

國際:https://huggingface.co/

鏡像:HF-Mirror

1、基本介紹

官網: 通義大模型_AI大模型_一站式大模型推理和部署服務-阿里云

開源:https://github.com/QwenLM/Qwen

在國產大模型領域,Qwen系列一直穩居前列,其出色的性能使其在多項評測中名列前茅。作為阿里巴巴的一項重要研發成果,Qwen系列的開源版本在業內備受矚目,且長期以來在各大榜單上表現優異。

  • 多模態能力:部分版本支持文本、圖像、音頻等多模態輸入與生成。

  • 超長上下文:最新模型支持高達128K tokens的上下文窗口,適合長文檔處理。

  • 高性能:在權威基準(如MMLU、C-Eval)上表現優異,接近或超越國際主流模型。

  • 工具調用:支持外部API調用、代碼解釋器等,增強復雜任務處理能力。

這張圖表展示了多個大語言模型(LLMs)在不同評估基準上的性能表現,各列的參數含義如下:

  • Model

模型名稱,如 MPT、Falcon、ChatGLM2、LLaMA、Qwen 等。

  • Params

模型參數量(參數規模),單位是 B(Billion,十億)。例如 7B 表示模型有 70 億參數。

  • MMLU (5-shot)

Massive Multitask Language Understanding,是一個跨學科考試題集,衡量模型的廣泛知識掌握能力。

5-shot 表示使用 5 個示例提示(few-shot learning)進行評測。

  • C-Eval (5-shot)

C-Eval 是面向中文的多任務評測集,涵蓋中國大學考試內容等。

5-shot 同樣表示使用 5 個示例提示。

  • GSM8K (8-shot)

Grade School Math 8K,是一個數學問題解決數據集,適用于小學級別數學推理能力評測。

8-shot 表示給出 8 個示例再讓模型解題。

  • MATH (4-shot)

比 GSM8K 更難,是中學至大學級別的數學題數據集,評估模型在復雜數學問題上的能力。

4-shot 表示提供 4 個示例。

  • HumanEval (0-shot)

由 OpenAI 提供的評估模型編程能力的數據集,包含 Python 編程任務。

0-shot 表示不提供任何提示,直接讓模型生成代碼。

  • MBPP (3-shot)

Mostly Basic Python Problems,也是編程任務集合,但比 HumanEval 更基礎。

3-shot 表示提供 3 個編程示例。

  • BBH (3-shot)

Big-Bench Hard,是 BIG-bench 數據集中最難的子集,涵蓋推理、數學、邏輯等多種任務。

3-shot 表示提供 3 個例題。

2、線上體驗

你說自己牛逼就牛逼?那不行,我要體驗一下

https://huggingface.co/spaces/Qwen/Qwen2.5-Coder-7B-Instruct

通義大模型_AI大模型_一站式大模型推理和部署服務-阿里云

3、本地部署

各種配置方式

3.1 modelscope

搜索對應的模型即可~

官方指導: 通義千問3-0.6B

3.2 huggingface

搜索對應的模型即可~

官方指導:https://huggingface.co/Qwen/Qwen3-0.6B

3.3 Ollama

Ollama是一個開源工具,用于在本地計算機上快速運行、管理和部署大型語言模型(LLMs)。它支持多種開源模型(如 Llama 3、Mistral、Gemma、Qwen 等),并提供簡單命令行操作,適合開發者和研究者本地測試 LLM。

官網:Ollama

支持的模型:Ollama Search

3.3.1 安裝

下載安裝即可,Ollama安裝硬件要求:

  • Windows:3060以上顯卡+8G以上顯存+16G內存,硬盤空間至少20G

  • Mac:M1或M2芯片16G內存,20G以上硬盤空間

3.3.2 基本命令
命令說明
ollama pull <模型名>下載模型(如 llama3
ollama run <模型名>運行模型交互式對話
ollama list查看已安裝模型
ollama rm <模型名>刪除模型

3.3.3 運行模型

ollama pull qwen:7b ? ? ? ? ? # 下載 Qwen-7B
ollama run qwen:7b ? ? ? ? ? ?# 啟動聊天

3.3.4 適用場景
  • 開發測試 – 快速驗證模型效果

  • 離線應用 – 無網絡環境下使用 LLM

  • 輕量級部署 – 替代云 API 的高成本方案

3.3.5 請求示例

POST http://localhost:11434/api/chat
Content-Type: application/json

{
? "model": "qwen3:0.6b",
? "messages": [
? ? { "role": "user", "content": "LLM是什么?" }
? ],
? "stream": true
}

響應:

json復制編輯{
? "message": {
? ? "role": "assistant",
? ? "content": "你好!我不知道實時天氣信息,但你可以查看天氣預報網站獲取最新天氣。"
? },
? "done": true
}

3.4 vLLM

參考Docker

四、DeepSeek-1.5B本地部署

大模型本地部署是指將大型預訓練模型(如GPT、Llama、BERT等)完全部署在用戶自有的硬件設備(如服務器、本地計算機)上,而非依賴云端API服務。

1、特點

  • 私有化:模型和數據完全存儲在本地,無需通過互聯網傳輸。

  • 自主控制:用戶擁有模型的完整權限,可自由修改、訓練或調整推理邏輯。

  • 離線運行:無需網絡連接即可使用模型能力(如生成文本、分析數據)。

2、功能

  • 數據安全:敏感數據(如醫療記錄、企業機密)無需上傳第三方服務器,避免泄露風險。

  • 模型微調:基于本地數據調整模型參數,適配垂直領域任務(如法律合同分析)。

  • 硬件適配:針對本地GPU/CPU資源優化模型推理速度(如量化、剪枝)。

  • 無需聯網:在斷網環境(如實驗室、保密機構)中仍可使用模型能力。

3、模型下載

  • 從huggingface找到你要下載的模型

  • 安裝huggingface的下載工具(python庫):

    pip install huggingface_hub
  • 下載模型文件

    set HF_ENDPOINT=https://hf-mirror.com ?# 加速下載設置
    huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local-dir ./deepseek ?# 下載模型文件
    huggingface-cli download thenlper/gte-large --local-dir ./gte-large
    huggingface-cli download BAAI/bge-base-zh --local-dir ./bge-base-zh
    ?

4、非流式推理

利用transformer框架進行部署推理: Transformer庫的使用手冊:Transformers文檔

4.1 參考代碼

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch# 一:加載模型
model_path = r"./modeldir"  # 模型路徑
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16  # 指定模型參數類型為float16
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch_dtype).to(device
)  # 加載模型并移動到GPU
tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加載分詞器# 二:設置生成參數和輸入消息
gen_kwargs = {"max_length": 1024,  # 生成的最大長度"do_sample": True,  # 是否使用概率采樣"top_k": 10,  # 采樣時的前K個候選詞,越大越隨機"temperature": 0.7,  # 生成豐富性,越大越有創造力"top_p": 0.8,  # 采樣時的前P個候選詞,越大越隨機"repetition_penalty": 1.2,  # 重復懲罰系數,越大越不容易重復
}
# 定義消息內容
messages = [{"role": "system", "content": "你是AI助手"},{"role": "user", "content": "明月幾時有"},
]# 三:將輸入數據轉換為模型可接受的格式
inputs = tokenizer.apply_chat_template(messages,add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True,
).to(device
)  # 將輸入數據移動到GPU# 四:生成輸出
outputs = model.generate(**inputs, **gen_kwargs)  # 生成輸出
outputs = outputs[:, inputs["input_ids"].shape[1] :]  # 截取生成的輸出
result = tokenizer.decode(outputs[0], skip_special_tokens=True)  # 解碼輸出# 五:打印結果
print(result)  # 打印結果

4.2 參數詳解

  1. device

    • 概念:指定模型運行的計算設備(CPU 或 GPU)。在 PyTorch 中通常為 "cpu" 或 "cuda:0"。

    • 設置建議:優先使用 GPU(如 device="cuda:0"),顯存不足時用 CPU。

  2. torch_dtype

    • 概念:模型張量的數據類型,如 float32(高精度)、float16 或 bfloat16(低精度,節省顯存)。

    • 影響:精度越高(如 float32),結果越精確,但顯存占用更大。精度越低(如 float16),顯存占用少,但可能損失精度或數值不穩定。

    • 設置建議:GPU 推薦 torch.float16 或 bfloat16(兼容性需確認);CPU 通常用 float32。

  3. max_length

    • 概念:生成文本的最大長度(token 數量)。

    • 影響:值越大,生成內容越長,但速度越慢,且可能重復或偏離主題。值過小可能導致回答不完整。

    • 設置建議:根據任務調整:對話建議 100-300,長文本生成可設 512-1024,注意模型最大限制(如 4096)。

  4. do_sample

    • 概念:是否啟用采樣策略(如 top_k, top_p)。若為 False,則使用貪心解碼(確定性強)。

    • 影響:True:輸出多樣化,適合創意任務。False:輸出確定性強,適合事實性問題。

    • 設置建議:需要多樣性時設為 True,需準確性時設為 False。

  5. top_k

    • 概念:采樣時保留概率最高的前 k 個 token。

    • 影響:值越大(如 100),候選 token 多,輸出多樣但可能不相關。值越小(如 10),輸出更確定但可能重復。

    • 設置建議:通常設為 10-50。

      Token概率
      "貓"0.30
      "狗"0.25
      "鳥"0.15
      "跑"0.10
      "跳"0.08
      "飛"0.07
      "叫"0.05

      top_k=3 采樣:

      • 只保留概率最高的 3個 token:["貓", "狗", "鳥"]

      • 在這三個中按概率隨機采樣一個。

  6. temperature

    TokenLogitsSoftmax(T=1)Softmax(T=0.5)Softmax(T=2)
    "貓"4.00.600.800.40
    "狗"3.00.250.180.30
    "鳥"2.00.150.020.30
    • 概念:控制采樣隨機性,調整概率分布平滑度。

    • 影響:值大(如 1.5):輸出隨機性高,可能不連貫。值小(如 0.1):輸出更確定,但易重復。

    • 設置建議:平衡點常為 0.7-1.0;需創造性時調高(如 0.9),需保守時調低(如 0.3)。

  7. top_p(核采樣)

    • 概念:從累積概率超過閾值 p 的最小 token 集合中采樣。

    • 影響:值大(如 0.95):候選 token 多,輸出多樣。值小(如 0.5):候選 token 少,輸出更集中。

    • 設置建議:常用 0.7-0.95。

      Token概率累積和
      "貓"0.250.25
      "狗"0.200.45
      "鳥"0.150.60
      "跑"0.120.72
      "跳"0.100.82
      "飛"0.090.91 : 達到 top_p 閾值
      "叫"0.050.96
  8. repetition_penalty

    if token in generated_tokens:logits[token] /= repetition_penalty
    • 概念:懲罰重復 token 的權重(>1.0 時抑制重復,<1.0 時鼓勵重復)。

    • 影響:值大(如 2.0):減少重復,但可能生成不自然內容。值小(如 1.0):無懲罰,默認行為。

    • 設置建議:通常設為 1.0-1.2,明顯重復時可設 1.2-1.5。

      應用場景推薦設置
      正常文本生成(如聊天)1.1~1.3(防止重復)
      模仿風格性強文本(如古詩)1.0(或略小)
      模型不斷重復一句話?適當增大 penalty(如 1.5)

4.3 代碼封裝

from transformers import AutoTokenizer, AutoModelForCausalLM
import torchclass DeepSeek:def __init__(self, model_path, device, torch_dtype):self.device = device  # 設定推理設備self.model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch_dtype).to(device)  # 加載模型并移動到GPUself.tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加載分詞器def inference(self, messages, gen_kwargs):inputs = self.tokenizer.apply_chat_template(messages,add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True,).to(self.device)  # 將輸入數據移動到GPUoutputs = self.model.generate(**inputs, **gen_kwargs)  # 生成輸出outputs = outputs[:, inputs["input_ids"].shape[1] :]  # 截取生成的輸出result = self.tokenizer.decode(outputs[0], skip_special_tokens=True)  # 解碼輸出return resultif __name__ == "__main__":# 一:設定模型路徑和設備,加載模型model_path = r"./modeldir"  # 替換為你的模型路徑device = "cuda:0" if torch.cuda.is_available() else "cpu"torch_dtype = torch.float16deepseek = DeepSeek(model_path, device, torch_dtype)# 二:設定推理參數,推理消息gen_kwargs = {"max_length": 1024,  # 生成的最大長度"do_sample": True,  # 是否使用概率采樣"top_k": 10,  # 采樣時的前K個候選詞,越大越隨機"temperature": 0.7,  # 生成豐富性,越大越有創造力"top_p": 0.8,  # 采樣時的前P個候選詞,越大越隨機"repetition_penalty": 1.2,}  # 重復懲罰系數,越大越不容易重復messages = [{"role": "system", "content": "你是一名樂于助人的人工智能助手"},{"role": "user", "content": "寫一個js判斷用戶驗證碼代碼"},]  # 定義消息內容result = deepseek.inference(messages, gen_kwargs)  # 調用推理方法print(result)  # 打印結果

5、流式推理

from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
import torch
from threading import Threadclass DeepSeek:def __init__(self, model_path, device, torch_dtype):self.device = device  # 設定推理設備self.model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch_dtype).to(device)  # 加載模型并移動到GPUself.tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加載分詞器def inference(self, messages, gen_kwargs):inputs = self.tokenizer.apply_chat_template(messages,add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True,).to(self.device)  # 將輸入數據移動到GPUstreamer = TextIteratorStreamer(self.tokenizer, skip_special_tokens=True)  # 創建流式輸出對象generation_kwargs = dict(**inputs, **gen_kwargs, streamer=streamer)  # 生成參數thread = Thread(target=self.model.generate, kwargs=generation_kwargs)  # 創建線程thread.start()  # 啟動線程進行生成generated_text = ""  # 初始化生成文本for new_text in streamer:  # 流式輸出生成的文本generated_text += new_text  # 累加生成的文本yield new_text  # 逐步返回生成的文本if __name__ == "__main__":# 一:設定模型路徑和設備,加載模型model_path = r"./modeldir"  # 替換為你的模型路徑device = "cuda"  # 指定推理設備為GPUtorch_dtype = torch.float16deepseek = DeepSeek(model_path, device, torch_dtype)# 二:設定推理參數,推理消息gen_kwargs = {"max_length": 1024,  # 生成的最大長度"do_sample": True,  # 是否使用概率采樣"top_k": 10,  # 采樣時的前K個候選詞,越大越隨機"temperature": 0.7,  # 生成豐富性,越大越有創造力"top_p": 0.8,  # 采樣時的前P個候選詞,越大越隨機"repetition_penalty": 1.2,}  # 重復懲罰系數,越大越不容易重復messages = [{"role": "system", "content": "你是一名樂于助人的人工智能助手"},{"role": "user", "content": "請簡要介紹一下你自己"},]  # 定義消息內容response = deepseek.inference(messages, gen_kwargs)  # 調用推理方法result = ""  # 初始化結果for chunk in response:  # 流式輸出生成的文本result += chunk  # 累加生成的文本print(result)  # 打印結果

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

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

相關文章

DAY 57 經典時序預測模型1

知識點回顧 序列數據的處理&#xff1a; 處理非平穩性&#xff1a;n階差分處理季節性&#xff1a;季節性差分自回歸性無需處理 模型的選擇 AR(p) 自回歸模型&#xff1a;當前值受到過去p個值的影響MA(q) 移動平均模型&#xff1a;當前值收到短期沖擊的影響&#xff0c;且沖擊影…

貪吃蛇游戲(純HTML)

一、游戲截圖二、源碼 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>離譜貪吃蛇</title>…

InnoDB詳解2

InnoDB詳解2一.行結構1.結構圖2.InnoDB支持的數據行格式1&#xff09;查看當前數據庫或表的行格式2&#xff09;指定行格式3&#xff09;DYNAMIC 格式的組成3.數據區存儲真實數據方式4.行的額外(管理)信息區5.頭信息區域1&#xff09;刪除一行記錄時在InnoDB內部執行的操作6.Nu…

Rust系統編程實戰:駕馭內存安全、無畏并發與WASM跨平臺開發

簡介本文深入探討Rust在系統編程領域的核心實戰應用&#xff0c;通過代碼示例解析其所有權機制如何保障內存安全&#xff0c;如何利用 fearless concurrency 構建高性能并發應用&#xff0c;并實踐如何將Rust代碼編譯為WebAssembly&#xff08;WASM&#xff09;以突破性能瓶頸。…

JavaScript 基礎入門:從概念解析到流程控制

文章目錄1. JavaScript 核心認知1.1 瀏覽器與 JavaScript 的關系1.2 JavaScript 的三大核心組成1.3 JavaScript 引入1.3.1 內聯腳本&#xff08;事件屬性綁定&#xff09;1.3.2 內部腳本&#xff08;<script> 標簽嵌入&#xff09;1.3.3 外部腳本&#xff08;獨立 .js 文…

WebSocket簡單了解

WebSocket 是一種計算機網絡通信協議&#xff0c;它在客戶端和服務器之間建立一個持久的、雙向的通信通道。與傳統的 HTTP 請求-響應模型不同&#xff0c;WebSocket 允許數據在客戶端和服務器之間實時雙向傳輸&#xff0c;因此非常適合需要即時交互的應用&#xff0c;如實時聊天…

【實時Linux實戰系列】基于實時Linux的生物識別系統

在當今數字化時代&#xff0c;生物識別技術因其高安全性和便捷性而被廣泛應用。生物識別系統通過識別個人的生物特征&#xff08;如面部、指紋等&#xff09;來驗證身份&#xff0c;廣泛應用于安全門禁、移動支付、智能設備解鎖等領域。這些系統不僅提高了安全性&#xff0c;還…

匯智煥彩,聚勢創新 - openKylin 2.0 SP2正式發布!

OpenAtom openKylin&#xff08;簡稱 “openKylin”&#xff09; 2.0 SP2版本正式發布&#xff01;本次版本更新在底層核心能力上&#xff0c;持續維護 6.6 穩定版內核&#xff0c;深度適配海光、飛騰、兆芯、龍芯等國產主流芯片&#xff0c;并積極推動 RISC-V 開放指令集架構生…

怎么評估高精度組合慣導的慣性導航價格?

內容概要高精度組合慣導系統的價格評估是一個需要綜合考量多個關鍵因素的復雜過程。理解其成本構成&#xff0c;對于制定合理的采購預算和優化決策至關重要。評估的核心首先聚焦于IMU傳感器價格&#xff0c;這是整個系統成本中最主要的組成部分之一。同時&#xff0c;選擇可靠且…

深度學習開篇

首先我們要知道深度學習和機器學習的關系——深度學習(DL, Deep Learning)是機器學習(ML, Machine Learning)領域中一個新的研究方向。 深度學習簡介 我理解的深度學習就通過多層感知器&#xff0c;對數據進行訓練&#xff0c;可以達到非線性變換&#xff0c;如何可以提取非線性…

Typescript入門-interface講解

對象成員語法形式1&#xff09;對象屬性2&#xff09;對象的屬性索引3&#xff09;對象的方法4&#xff09;函數5&#xff09;構造函數interface 的繼承interface 繼承 interfaceinterface 繼承 typeinterface 繼承 class接口合并interface 與 type 的異同interface 是對象的模…

數據結構青銅到王者第五話---LinkedList與鏈表(2)

目錄 一、常見的鏈表題目練習&#xff08;續&#xff09; 1、鏈表的回文結構。 2、輸入兩個鏈表&#xff0c;找出它們的第一個公共結點。 3、給定一個鏈表&#xff0c;判斷鏈表中是否有環。 4、給定一個鏈表&#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#…

Kafa面試經典題--Kafka為什么吞吐量大,速度快

這是一個非常核心的面試題和技術問題。Kafka 的高吞吐量和速度并非來自某一項“銀彈”技術,而是其架構設計中一系列精巧決策共同作用的結果。 一、核心思想:最大化利用底層硬件資源 Kafka 速度快的根本原因是,它的設計哲學是 “盡可能地避免不必要的開銷,并將硬件(尤其是…

Stream API 新玩法:從 teeing()到 mapMulti()

1. 背景&#xff1a;Stream API 的演進 自 Java 8 引入 Stream API 以來&#xff0c;Java 的集合處理方式發生了質變。開發者可以用聲明式風格實現復雜的數據轉換與聚合。然而&#xff0c;隨著應用場景多樣化&#xff0c;社區逐漸發現一些“尷尬空缺”&#xff1a; 聚合時&…

STM32G4 SVPWM VF開環強拖電機

目錄一、STM32G4 SVPWM VF開環強拖電機1 SVPWM1.1 SVPWM技術簡介1.2 基于零序分量注入的SVPWM算法的實現2. VF開環強拖電機3. VF啟動電機實驗現象附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)一、STM32G4 SVPWM VF開環強拖電機 1 SVPWM 1.1 SVPWM技術簡介 SVPWM控制策略…

產品運營必備職場通用能力及提升攻略,一文說明白

在互聯網行業蓬勃發展的當下&#xff0c;產品運營崗位成為了連接產品、用戶與商業目標的關鍵紐帶。從用戶增長到活動策劃&#xff0c;從數據分析到跨部門協作&#xff0c;產品運營人員需具備多元化技能&#xff0c;才能在激烈競爭中嶄露頭角。隨著企業對精細化運營與數據驅動決…

面試 總結(1)

面試總結 一、spring相關 1. Spring Security角色管理實現 在智慧種植蟲害識別系統中&#xff0c;我實現了農戶端和企業端的雙角色權限控制&#xff0c;這一部分是這樣實現的&#xff1a; MySQL 表時設計區分農戶和企業的角色表與權限表。登錄時&#xff0c;JWT 令牌包含用戶 I…

串與數組:從字符處理到多維存儲的數據結構詳解

串&#xff08;字符串&#xff09;和數組是數據結構中的兩個重要分支&#xff0c;它們在程序設計中承擔著不同但互補的角色。串專門處理字符數據&#xff0c;而數組則提供了多維數據的存儲和訪問機制。本文將深入探討這兩種數據結構的理論基礎、實現方法和核心算法。 文章目錄1…

面試之JVM

類的生命周期 加載、鏈接、初始化&#xff08;是類的初始化&#xff09;、使用&#xff08;對象的初始化&#xff09;、卸載&#xff08;GC&#xff09; 鏈接&#xff1a;驗證、準備、解析 類加載 JDK9的升級點&#xff1a;擴展類加載器改成了平臺類加載器。 java中很多的包分…

webpack開發模式與生產模式(webpack --mode=development/production“, )

webpack開發模式與生產模式的區別webpack的development&#xff08;開發模式&#xff09;和production&#xff08;生產模式&#xff09;是兩種常見的構建環境配置&#xff0c;主要區別體現在構建速度、代碼優化和調試支持等方面。開發模式 (development)目標&#xff1a;注重開…