国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在 Windows 上利用Qwen大模型搭建一個(gè) ChatGPT 式的問(wèn)答小助手

這篇具有很好參考價(jià)值的文章主要介紹了在 Windows 上利用Qwen大模型搭建一個(gè) ChatGPT 式的問(wèn)答小助手。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文首發(fā)于公眾號(hào):Hunter后端
原文鏈接:在 Windows 上利用Qwen大模型搭建一個(gè) ChatGPT 式的問(wèn)答小助手

最近 ChatGPT 式的聊天機(jī)器人比較火,可以提供各種問(wèn)答功能,阿里最近推出了 Qwen1.5 系列的大模型,提供了各個(gè)參數(shù)版本的大模型,其中有一些參數(shù)量較小的模型,比較適合我們這種窮* 用于嘗試一下手動(dòng)運(yùn)行大模型。

今天我們就使用 Qwen1.5 大模型來(lái)嘗試一下,自己搭建一個(gè)問(wèn)答小助手。

1、配置

首先介紹一下搭建的環(huán)境,8g 內(nèi)存,4g GPU 顯存,win10系統(tǒng),所以如果配置等于或高于我這個(gè)環(huán)境的也可以輕松實(shí)現(xiàn)這一次的搭建過(guò)程。

下面是搭建成功后一些問(wèn)答的效果展示:

其中,因?yàn)轱@存限制,我這邊分別使用 Qwem1.5-0.5B-Chat 和 Qwem1.5-1.8B-Chat 進(jìn)行測(cè)試,0.5B 版本占用顯存不到 2g,1.8B 版本顯存占用不到 4g,這個(gè) B 表示的是模型使用的參數(shù)量,在我電腦上 0.5B 的版本推理速度要比 1.8B 的速度要快很多,但是某些問(wèn)題的準(zhǔn)確性沒(méi)有 1.8B 高。

接下來(lái)正式介紹搭建過(guò)程。

2、環(huán)境安裝

使用 Qwen 這個(gè)大模型需要用到 CUDA 相關(guān)驅(qū)動(dòng)以及幾個(gè) Python 庫(kù),torch,transformers,accelerate 等。

1. CUDA

首先,確認(rèn) Windows 機(jī)器上是否有相關(guān)驅(qū)動(dòng),這里我們可以在 cmd 里輸入 nvidia-smi 查看相應(yīng)輸出,比如我的輸入如下:

然后上張圖里截出來(lái)的 CUDA Version 去下面這個(gè)地址下載 CUDA Toolkit:https://developer.nvidia.com/cuda-toolkit-archive

到這一步完成,相應(yīng)的 CUDA 準(zhǔn)備工作就 OK 了。

建議可以先看下下面這個(gè)鏈接,里面有完整的安裝示意流程:Windows下CUDA安裝

2. conda 環(huán)境準(zhǔn)備

這里為了方便,我新建了一個(gè) conda 環(huán)境,使用的 Python 3.10 版本

conda create -n qwen python=3.10

3. torch 庫(kù)

為了使用 GPU,torch 庫(kù)的版本需要是 cuda 版本的,在 Windows 版本下我直接安裝其 whl 包,可以在下面的地址找到對(duì)應(yīng)的版本:https://download.pytorch.org/whl/torch_stable.html。

這里我下載的是文件名是 torch-2.2.1+cu121-cp310-cp310-win_amd64.whl。

torch-2.2.1 表示的是 torch 的版本

cu121 表示的是 cuda 版本是 12.1,我們實(shí)際的 CUDA Version 是 12.4,沒(méi)有最新的但是也能兼容

cp310 是 Python 的版本 3.10

win_amd64 則是 Windows 版本。

whl 包比較大,有 2 個(gè)多 g,下載后直接到對(duì)應(yīng)的目錄下執(zhí)行下面的操作即可:

pip3 install torch-2.2.1+cu121-cp310-cp310-win_amd64.whl

4. transformers 庫(kù)

transformers 庫(kù)是使用大模型的基礎(chǔ)庫(kù),這里注意下,Qwen1.5 版本的大模型是最近才出來(lái)的,所以 transformers 庫(kù)需要比較新的才能支持,需要 >= 4.37.0

這里我們直接 pip3 install transformers 就會(huì)自動(dòng)為我們安裝最新的庫(kù),也可以直接指定這個(gè)版本。

5. accelerate 庫(kù)

我在操作的過(guò)程中,還需要用到 accelerate 這個(gè)庫(kù),所以額外安裝下:

pip3 install accelerate -i https://mirrors.aliyun.com/pypi/simple/

到這一步,我們的環(huán)境就安裝好了,我們可以嘗試一下是否可以正常使用 CUDA:

import torch
print(torch.cuda.is_available())
# True

輸出為 True 則表示可以正常使用 CUDA。

3、下載模型

所有大模型的下載官方都會(huì)發(fā)布在 huggingface 網(wǎng)站上:https://huggingface.co/。

我們可以在上面搜索到目前所有發(fā)布的大模型,包括 Qwen 系列,百川系列,ChatGLM 系列,Llama 系列等。

我們可以下載下一步執(zhí)行代碼的時(shí)候直接指定模型名稱,會(huì)自動(dòng)為我們下載,但是我習(xí)慣于先將其下載下來(lái),然后在本地指定路徑進(jìn)行調(diào)用。

這里我們可以去這兩個(gè)地址下載對(duì)應(yīng)的文件:

https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat/tree/main

https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat/tree/main

分別是 Qwen1.5 的 0.5B Chat 版本和 1.8B Chat 版本。

其中,最主要的文件是 model.safetensors,這個(gè)就是大模型本身,也就是我們運(yùn)行的時(shí)候需要加載的文件,可以看到這兩個(gè)地址的這個(gè)文件分別是 1g 多和 3g 多。

除此之外,還有一些必要的配置文件比如 config.json,一些詞表的文件用于加載的時(shí)候做映射操作。

注意:上面的網(wǎng)址可能需要一些魔法操作,如果你沒(méi)有魔法的途徑,可以去魔搭社區(qū)找對(duì)應(yīng)的版本,https://www.modelscope.cn/search?search=Qwen1.5

這里,下載的大模型文件列表如下圖所示:

至此,我們所有的準(zhǔn)備工作就完成了,接下來(lái)我們可以開(kāi)始寫(xiě)代碼進(jìn)行問(wèn)答操作了。

4、對(duì)話代碼

我們需要先加載大模型:

from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda" # the device to load the model onto
path = r"F:\\models\\Qwen1.5-0.5B-Chat"

model = AutoModelForCausalLM.from_pretrained(
? ? path,
????torch_dtype="auto",
????device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(path)

這里的 path 就是我們下載的大模型的本地文件路徑。

接下來(lái)下面的代碼就是進(jìn)行對(duì)話的操作了:

prompt = "你是誰(shuí)"
messages = [
????{"role": "system", "content": "You are a helpful assistant."},
????{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
????messages,
????tokenize=False,
????add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(
????model_inputs.input_ids,
????max_new_tokens=512
)
generated_ids = [
????output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(response)
# 我是來(lái)自阿里云的超大規(guī)模語(yǔ)言模型,我叫通義千問(wèn)。我是一個(gè)能夠回答問(wèn)題、創(chuàng)作文字,還能表達(dá)觀點(diǎn)、撰寫(xiě)代碼的 人工智能模型。如果您有任何問(wèn)題或需要幫助,請(qǐng)隨時(shí)告訴我,我會(huì)盡力提供支持和解答。

1. 封裝成函數(shù)

我們可以將上面下部分代碼封裝成函數(shù),這樣就可以每次直接調(diào)用函數(shù)來(lái)進(jìn)行問(wèn)答操作了:

def get_response(prompt):
?? ?messages = [
?????? ?{"role": "system", "content": "You are a helpful assistant."},
?????? ?{"role": "user", "content": prompt}
?? ?]
?? ?text = tokenizer.apply_chat_template(
?????? ?messages,
?? ?????tokenize=False,
?????? ?add_generation_prompt=True
?? ?)
?? ?model_inputs = tokenizer([text], return_tensors="pt").to(device)
?? ?generated_ids = model.generate(
?????? ?model_inputs.input_ids,
?? ?????max_new_tokens=512,
?? ??? ?pad_token_id=tokenizer.eos_token_id
?? ?)
?? ?generated_ids = [
?????? ?output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
?? ?]
?? ?response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
? ? print(response)

然后可以直接調(diào)用函數(shù)進(jìn)行問(wèn)答:

get_response("如何學(xué)習(xí)Python?")

2. 保存歷史進(jìn)行多輪對(duì)話

接下來(lái)我們可以保存對(duì)話歷史來(lái)進(jìn)行多輪對(duì)話,以下是代碼:


def run_qwen_with_history():
????messages = [
????????{"role": "system", "content": "You are a helpful assistant."},
????????# {"role": "user", "content": prompt}
????]

????while True:
????????new_question = input("請(qǐng)輸入你的問(wèn)題:")
????????if new_question == "clear":
????????????messages = [messages[0]]
????????????continue

????????messages.append({"role": "user", "content": new_question})
????????text = tokenizer.apply_chat_template(
????????????messages,
????????????tokenize=False,
????????????add_generation_prompt=True
????????)
????????model_inputs = tokenizer([text], return_tensors="pt").to(device)

????????generated_ids = model.generate(
????????????model_inputs.input_ids,
????????????max_new_tokens=512,
?? ?????????pad_token_id=tokenizer.eos_token_id
????????)
????????generated_ids = [
????????????output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
????????]

????????response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
????????print(response)
????????messages.append({"role": "system", "content": response})

在這里執(zhí)行這個(gè)函數(shù)之后,會(huì)在命令行里輸出 請(qǐng)輸入你的問(wèn)題:,然后我們可以輸入我們的問(wèn)題,之后可以連續(xù)多輪輸出,后臺(tái)會(huì)記住我們之前的對(duì)話,從而實(shí)現(xiàn)多輪對(duì)話的功能。

5、總結(jié)

經(jīng)過(guò)分別使用 0.5B 版本和 1.8B 的版本,在我電腦的配置里,0.5B 版本的輸出會(huì)快一些,但是在某些問(wèn)題回答的質(zhì)量上不如 1.8B。

而 1.8B 版本答案質(zhì)量相對(duì)較高,但是速度在 4g 顯存的情況下,則非常慢。

以上就是本次使用 Qwen1.5 在 Windows 上搭建問(wèn)答小助手的全過(guò)程,之后還可以將大模型提供接口操作,將其應(yīng)用到 web 頁(yè)面上,從而實(shí)現(xiàn)一個(gè)真正的 ChatGPT 式問(wèn)答助手。

對(duì)于以上這些操作是直接使用的大模型,而真正要將其應(yīng)用于生產(chǎn),還需要對(duì)大模型進(jìn)行微調(diào),訓(xùn)練等一系列操作,使其更適用于實(shí)際場(chǎng)景,這些以后有機(jī)會(huì)再學(xué)習(xí)介紹吧。

如果想獲取更多后端相關(guān)文章,可掃碼關(guān)注閱讀:
在 Windows 上利用Qwen大模型搭建一個(gè) ChatGPT 式的問(wèn)答小助手文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-841024.html

到了這里,關(guān)于在 Windows 上利用Qwen大模型搭建一個(gè) ChatGPT 式的問(wèn)答小助手的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包