首发!Llama3纯本地部署攻略!中文方法!

news/2024/5/18 16:16:40

引言

llama3在4月19日刚刚发布,官方的对比结果中在开源模型中堪称世界第一,整好周六日有时间,在魔搭社区上测试一下

一、启动环境

登录魔搭社区,到自己的机器资源,可以看到,可选的机器配置, 这里我们选择:8核32G内存,24G显存; 预装ModelScope 预装镜像为:ubuntu22.04-cuda12.1.0-py310-torch2.1.2-tf2.14.0-1.13.3
在这里插入图片描述
点击启动:
在这里插入图片描述
启动后,可以进入terminal,检查机器配置:
在这里插入图片描述
进入命令行界面:
在这里插入图片描述
输入invdia-smi, 可以看到是A10卡,24G显存
在这里插入图片描述

二、模型下载

这里可以借助modelscope进行模型下载

from modelscope import snapshot_download
from transformers import AutoModelForCausalLM, AutoTokenizer# 下载模型参数
model_dir=snapshot_download('LLM-Research/Meta-Llama-3-8B-Instruct')
print(model_dir)

可以看到,使用魔搭社区下载模型参数可以达到400M每秒,非常快(因为是从modelscope的托管平台,下载到modelscope的云平台)。
在这里插入图片描述

三、运行本地大模型:

1、使用transfomer运行本地大模型

1.1、 加载我们下载好的模型
 # 使用transformer加载模型# 这行设置将模型加载到 GPU 设备上,以利用 GPU 的计算能力进行快速,
device ="cuda"
# 加载了一个因果语言模型。
# model dir 是模型文件所在的目录。# torch_dtype="auto" 自动选择最优的数据类型以平衡性能和精度。# device_map="auto" 自动将模型的不同部分映射到可用的设备上。
model= AutoModelForCausalLM.from_pretrained(model dir,torch_dtype='auto',device_map="auto")
# 加载与模型相匹配的分词器。分词器用于将文本转换成模型能够理解和处
tokenizer=AutoTokenizer.from pretrained(model_dir)
1.2、 检查npu使用情况,可以看到加载完成后占用17G左右显存:

在这里插入图片描述

1.3、使用transformer 调用大模型
#加载与模型相匹配的分词器。分词器用于将文本转换成模型能够理解和处
prompt="你好,请介绍下你自己。"
messages=[{'role':'system','content':'You are a helpful assistant system'},
{'role': 'user','content': prompt}]
# 使用分词器的 apply_chat_template 方法将上面定义的消,息列表转护# tokenize=False 表示此时不进行令牌化,add_generation_promp
text =tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)#将处理后的文本令牌化并转换为模型输入张量,然后将这些张量移至之前
model_inputs=tokenizer([text],return_tensors="pt").to('cuda')
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512)# 对输出进行解码
response=tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
1.4、成功返回

在这里插入图片描述

2、使用ollama在本地部署模型服务

最常用的开源大模型部署和调用工具有两类,其一是ollama、其二是vLLM。这两款工具定位类似,但功能实现各有侧重。ollama更加侧重于为个人用户提供更加便捷的开源模型部署和调用服务,olama提供了openai风格的调用方法、GPU和CPU混合运行模式、以及更加便捷的显存管理方法,而vLLM则更加适用于企业级应用场景,采用的是服务端和客户端分离的模式,更适合企业级项目使用。

2.1、首先下载并安装运行脚本
curl -fsSL https://ollama.com/install.sh|sh

可以看到,安装完成了
在这里插入图片描述

2.2、然后开启ollama服务:
ollama serve

在这里插入图片描述
然后,再打开一个窗口,执行下面的命令安装和在命令行中调用llama3大模型:

ollama run llama3

启动后,可以在命令行调用:
在这里插入图片描述

2.3、另外,回到代码环境,可以使用openai风格代码调用
!pip install openai
from openai import OpenAI
client =0penAI(
base url='http://localhost:11434/v1/',
api key='ollama', # required but ignored
)
chat_completion=client.chat.completions.create(
messages=[{'role':'user''content':'你好,请介绍下你自己’}],
model='llama3',
)chat_completion.choices[0]

写一个多轮对话脚本

lef run chat session():# 初始化客户端client = 0penAI(base_url='http://localhost:11434/v1/',api_key='ollama', # API key is required but ig#初始化对话历史chat_history =[]#启动对话循环while True:# 获取用户输入user_input = input("你:")# 检查是否退出对话if user_input.lower()=='exit':print("退出对话。”)break#更新对话历史chat_history.append({'role': 'user','content':user_input}) # 调用模型获取回答try:chat completion=client.chat.completions.create(messages=chat_history,model='llama3')# 获取最新回答,适当修改以适应对象属性model_response=chat_completion.choices[0]print("AI:"model response)# 更新对话历史chat_history.append({'role':'assistant', 'content':model_response)except Exception as e:print("发生错误:",e)breakrun_chat_session()

在这里插入图片描述

总结

至此,完成了LLAMA3的模型部署,从测试的结果可以看到, llama3的基础模型对于中文的支持并不好,我们的问题是中文,它却返回了英文的结果,原因可能是因为它的训练集有15个T但是其中95%是英文,想要它支持中文更好,还需要使用中文的训练集进行微调,可喜的是,微调llma系列的中文训练集并不少(可能是因为llama系列都有这个问题),后续我会接着对llama3进行微调, 待续。。。


http://www.mrgr.cn/p/28457853

相关文章

信息收集-cnblog

信息收集 domain:"kuaishou.com" AND port:"80" 360网络空间检索语句(domain="qianxin.com")&&ip.port="80" 鹰图曾记得某位大佬说过“渗透测试的本质就是信息收集”,那么信息收集,我们到底该收集啥?信息收集是…

马蜂窝景点评论(以恭王府为例)

1. python部分 马蜂窝.py # -*- coding:utf-8 -*-# @Time : 2024/04/15 18:34 # @Author : 快乐的小猴子 # @Version : # @Function : import subprocess from functools import partial subprocess.Popen = partial(subprocess.Popen, encoding=utf-8) import execjs import r…

DRF之视图组件

【四】视图组件图源:drf(详细)_51CTO博客_什么是drf【1】两个视图基类 【1.1】APIView请在【View】中查看详细【1.2】GenericAPIView 【1.2.1】常用类属性基本设置:以下属性控制着基本视图的行为。queryset用于从视图返回对象的查询结果集。 通常,你必须设置此属性或者重写 g…

Spring Cloud Gateway详细介绍以及实现动态路由

一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …

JavaBean知识

“感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友。您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!🚀✨”JavaBean 使用前端HTML代码和Java 代码分离,业务逻辑单独封装,然后在JSP页面中调用,就降…

JavaBean-cnblog

JavaBean 使用前端HTML代码和Java 代码分离,业务逻辑单独封装,然后在JSP页面中调用,就降低了耦合度,让JSP更简介,更易维护复用,这样的类就是一个JavaBean组件类JavaBean分为可视化组件和非可视化组件两种,可视化组件可以是简单的GUI元素,如按钮 文本框可以是报表组件,非可视化没…

ctf知识积累

(1)url解码:python解码函数:from urllib.parse import unquote(quote:编码)url_code=""url_code1=unquote(url_code)print(url_code1)Edge 浏览器URL解码:开发人员工具输入:decodeURIComponent(‘’)(2)Unicode解码:from urllib.parse import unquote_plu…

机器人实验室CNRS-AIST JRL, IRL介绍

一、背景 作为搞机器人方向的学生,必须时常关注国际上顶尖实验室的研究成果,以免自己做的方向out,除了大家耳熟能详的Boston Dynamics,还有许多非常厉害的机器人实验室值得我们关注,如日本的CNRS-AIST JRL, IRL实验室…

数据结构PT1——线性表/链表

1:顺序存储实现(数组实现) Data: a1 a2 .....ai ai1 .... an .... typedef struct LNode *List; //指向LNode的指针,这是typedef的,你可以随时声明,而不加typedef只是创建一个 struct LNode{ //结构体成员ElementT…

初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺中考高分!-009

PDF格式公众号回复关键字:ZKYDT009原文1 How did the lot look at the beginning of the story? 解析 1 How 怎么样 did ,the lot 场地, look 看起来,at the beginning of the story?在故事的开头 故事开始时,那个场地看起来怎么样? 2 This place looks like a dump. 这…

30 天精通 RxJS (28):Scheduler 基本观念

不晓得读者们还记不记得,我们在前面的文章中有提到 Scheduler 是为了解决 RxJS 衍生的最后一个问题,而我们现在就在揭晓这个谜底。本系列仅作为学习记录所用,摘录自30 天精通 Rxjs!强烈推荐!膜拜大佬!

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到,按:shiftcommandp,会出现快捷键窗口,打pretty,会出现Format JSON,最右侧显示⌘J,说明只需要macos的⌘和J同时按…

2024红明谷杯——Misc 加密的流量

2024红明谷杯——Misc 加密的流量 写在前面: 这里是贝塔贝塔,照例来一段闲聊 打比赛但赛前一波三折,又是成功签到的一个比赛 说起来比赛全名叫红明谷卫星应用数据安全场景赛,但好像真的跟卫星的关系不大,没有bin方…

顺序表和链表的练习题

顺序表 题目一:题目分析: 该题目需要先对顺序表进行遍历至元素x正确插入位置,再对顺序表完成插入操作。因此涉及到for循环与if语句的使用 代码实现 /******************************************************************** * * name : SequenceList_insert * function : …

JZ8 二叉树的下一个结点

#include <cstddef> class Solution { public:vector<TreeLinkNode*> nodes; //用户得到的输入只有一个 子树根节点TreeLinkNode* GetNext(TreeLinkNode* pNode) {TreeLinkNode* root = pNode;//获取根节点while(root->next )root = root->next;//中序遍历用…

没闲着系列 20

现已将dashboard页面加入了需求的图表和点击panel. 如下图:且现在这个图表是根据迭代出现的,及哪个迭代中出现了多少个需求的story(包括变更、新增、删减、确认), 之后要做的就是将breakdown story和issues连起来,当然在story需求中也可以直接更改状态到完成,而无需创建issues.…

C++:多态

目录 概念&#xff1a; 多态产生的条件&#xff1a; 虚函数的重写&#xff1a; 虚函数&#xff1a;即被virtual修饰的类成员函数称为虚函数 虚函数重写的两个例外&#xff1a; 协变(基类与派生类虚函数返回值类型不同) 析构函数 而为什么没有调用到子类呢&#xff1f; …

查找链表中倒数第k(k为正整数)个位置上的结点,查找成功输出该结点的data值,并返回1,否则只返回0

/******************************************************** name : FindKNode* function : 查找链表中倒数第k(k为正整数)个位置上的结点* 查找成功输出该结点的data值,并返回1,否则只返回0* argument* @head : 链表头结点的地址*…

杂货铺 | KVM虚拟化环境的配置 初步实现两种Guest OS虚拟机的部署

文章目录 &#x1f4da;在ubuntu系统的虚拟机上挂载CentOS操作系统的客户机&#x1f407;下载镜像并配置虚拟机&#x1f407;开启虚拟机&#xff0c;检查CPU是否支持虚拟化&#x1f407;查看是否加载KVM模块&#x1f407;关闭selinux&#x1f407;安装KVM相关软件包&#x1f40…

DRF之View和APIView

【零】DRF在Django项目中的使用 【1】导入 # DRF需要使用pip install 安装 pip install djangorestframeworkDRF(Django Rest Framework)是一个用于构建 Web API 的工具包,它是基于 Django 框架的一个第三方应用(app) 在 Django 项目中,一个应用(app)通常是一个具有特定…