使用Langchain本地体验最新的千问2.5模型

电脑算力有限,本地体验一下新出的千问2.5模型。准备对长文本进行量化做本地知识库,想搭建一个本地模型做为核心。

千问2.5开源模型介绍:
Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。目前,大语言模型已升级至Qwen2.5版本。无论是语言模型还是多模态模型,均在大规模多语言和多模态数据上进行预训练,并通过高质量数据进行后期微调以贴近人类偏好。Qwen具备自然语言理解、文本生成、视觉理解、音频理解、工具使用、角色扮演、作为AI Agent进行互动等多种能力。

本地知识库的核心,我想使用本地的大模型,本地搭建大模型,也有八百种方法。

常用的:
Ollama直接运行,小白推荐。
LM Studio一键运行

或者使用一些推理框架
llamacpp
vllm
modelscope
Huggingface都可以。

还是推荐使用ollama或者llamaCpp比较好用,简单实用。用本文的方法,0.5B还行,再大一点的模型,GPU小了,跑不动。

像llamacpp和vllm都是经过优化的,体验会好很多。之所以用langchain是为了方便一键搭建本地的知识库。

模型下载地址:https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct 需要魔法

1、HuggingFace先下载模型文件
方案一:huggingface-cli直接下载

huggingface-cli download --resume-download Qwen/Qwen2.5-0.5B-Instruct

会中断,带魔法也会中断,

方案二,使用python来下载

from huggingface_hub import snapshot_download, hf_hub_download

file_path = snapshot_download(repo_id='Qwen/Qwen2.5-0.5B-Instruct',
                              # local_dir="Qwen/Qwen2-0.5B-Instruct",
                              etag_timeout=100,
                              resume_download=True)

print(f"Model file downloaded to: {file_path}")

依然会中断下载,报错
requests.exceptions.ChunkedEncodingError: (‘Connection broken: IncompleteRead(291031658 bytes read, 697066166 more expected)’, IncompleteRead(291031658 bytes read, 697066166 more expected))

基本上都是网络问题。网上太多人遇到这个问题,提出的解决办法是
在requests请求时加上stream = True
需要修改huggingface包的源码,太麻烦了。

解决办法1:使用国内的镜像

export HF_ENDPOINT=https://hf-mirror.com

依然会出现这个问题

解决办法2: 直接使用魔法,添加proxies参数到下载器

file_path = snapshot_download(repo_id='Qwen/Qwen2.5-0.5B-Instruct',
                              # local_dir="Qwen/Qwen2-0.5B-Instruct",
                              etag_timeout=100,
                              proxies={'https': 'http://127.0.0.1:1181', 'http': 'http://127.0.0.1:1181'},
                              resume_download=True)

下载300M依然出现这个问题,虽然带断点续传的功能,但是下载回来的模型加载不了,继续想办法下载

解决办法3:最后只能用杀器了。

git lfs clone https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct

再进入huggingface的缓存目录,用下载的整个镜像替换掉目录中的内容

cd ~/.cache/huggingface/hub
粘贴到目录:models--Qwen--Qwen2.5-0.5B-Instruct下

运行python调用时,依然不认,原来缓存的文件是需要固定的格式。

只能把模型移到单独的目录中。手动修改python的调用代码,就可以继续调取大模型。

2、python中调用模型

# 加载模型
model_id = '/Users/kyle/AIModel/Qwen2.5-0.5B-Instruct'

llm = HuggingFacePipeline.from_model_id(
    model_id=model_id, task="text-generation",
    # device=0,
    pipeline_kwargs=dict(
        max_new_tokens=512,
        do_sample=False,
        repetition_penalty=1.03,
    ))

# 聊天方式调用模型
chat_model = ChatHuggingFace(llm=llm)

parser = StrOutputParser()
prompt_template = ChatPromptTemplate.from_messages([
    ("system", "你是一个全能的助手"),
    ("user", "给我讲个关于{topic}的笑话")
])
chain = prompt_template | chat_model | parser
resp = chain.invoke({'topic': '美食'})
print(resp)

运行结果

<|im_start|>system
你是一个全能的助手<|im_end|>
<|im_start|>user
给我讲个关于美食的笑话<|im_end|>
<|im_start|>assistant
好的,我来给你讲一个关于美食的笑话:

为什么厨师总是喜欢在晚上做菜?
因为晚上是做菜的好时机!

测试不同的问题,总是会把上下文的问题也列出来,以为是自己操作有问题,查了半天资料,无果。

最后无意中从langchain官方文档中找到有一个skip_prompt参数,加上之后,可以完美输出了。

chain = prompt_template | chat_model.bind(skip_prompt=True) | parser

修改原有的LCEL链,保存执行,完美收官。

很多人吐槽langchain,说实话,这玩意儿,一个东西,八百种写法。谁用谁懵逼。不过确实整合了非常多概念在里面。

使用Langchain本地体验最新的千问2.5模型

0.5B模型的笑话,一点都不好笑。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇