赞
踩
最近发现大语言模型真的很火,而且它的归纳总结能力出奇的强,但是作为一个不方便使用魔法的程序员,不得不思考如何去离线部署、私有化这一技术,因此我会在这一系列博客和大家一起部署一个GIS相关的RAG项目,在技术选型方面尽量采用Windows系统及国内源,下面开始吧~
这篇文章带领大家简单构建一个本地模型哦~
提示:以下是本篇文章正文内容,下面案例可供参考
Windows系统下的基本python环境配置,大家可以参考我的这篇文章:
python环境配置方法(2023)
鉴于有些同志不方便魔法上网登录Huggingface网站,因此大家可以选用阿里的Modelscope社区,环境配置的官方文档如下:
ModelScope快速开始
我的笔记本GPU是3060的显卡,大家可以借鉴一下我的环境配置哦~
gradio==4.21.0
langchain==0.1.11
modelscope==1.12.0
numpy==1.26.4
openai==0.28.1
pandas==2.2.1
sentence_transformers==2.5.0
torch==1.13.0+cu117
transformers==4.37.2
weaviate_client==4.5.0
登录pytorch官网找到合适自己的版本哦!
pip install torch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 -f https://download.pytorch.org/whl/cu117/torch_stable.html
首先,在控制台激活你的环境,我自己搭建的环境叫transformers:
conda activate transformers(换成你自己的环境名称)
然后,依次输入看看你的GPU有没有在好好运行~
进入python
最后,导入你的torch库,然后看看输出是否为True。
import torch
torch.cuda.is_available()
创建一个py文件,用下面的代码测试一下下载模型、读取模型的流程是否顺利:
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen1.5-0.5B')
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
请注意,文档中的model_dir,可以直接从modelscope的仓库下载:
小提示,以通义千问模型为例,介绍不同后缀的作用:
预训练模型:续写文章 (例如:qwen/Qwen1.5-0.5B)
chat:对话模型 (例如:qwen/Qwen1.5-0.5B-Chat)
chat-int8/4: 8/4bit量化 把模型层换一下,调优,减少显存占用 4bit量化优化的更好 (例如:qwen/Qwen1.5-0.5B-Chat-GPTQ-Int4)
代码如果成功运行,则会自动下载,如图所示:
路径如下:
C:\Users\用户名\.cache\modelscope\hub\qwen\Qwen1___5-0___5B
记得把自己用户名改一下,然后目录指向对应的模型文件夹即可~
然后改造一下刚才的代码看看刚才的模型是否ok:
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import snapshot_download
model_dir = r"C:\Users\用户名\.cache\modelscope\hub\qwen\Qwen1___5-0___5B-Chat-GPTQ-Int4"
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
如果没有报错的话,我们就可以进行下一步了,搞一个简单的问答~
用这个代码试验一下,看看输出结果如何~
from modelscope import AutoModelForCausalLM, AutoTokenizer device = "cuda" # the device to load the model onto model_dir = r"C:\Users\用户名\.cache\modelscope\hub\qwen\Qwen1___5-0___5B-Chat-GPTQ-Int4" # "qwen/Qwen1.5-0.5B-Chat-GPTQ-Int4" model = AutoModelForCausalLM.from_pretrained( model_dir, device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained(model_dir) query = "介绍一下什么是LLM." messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": query} ] 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)
输出结果不出所料,开始胡言乱语了,这就是“幻觉”问题,没错,我们后续要用RAG来解决它!!!
以后会时常更新在GIS学习中和论文产出过程中的一些小tips,内容包括但不限于LLM+RAG+Agent+GIS、深度学习和图像处理相关的知识方法,大家可以在评论区一起交流进步,请多多关注,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。