带你玩转,开源模型Llama3.1

带你玩转,开源模型Llama3.1
在这里插入图片描述
你好,我是忆~遂愿,全网2w+粉丝,《遂愿盈创》社群主理人。
副业启航① | 遂愿盈创(对副业感兴趣免费可入,多种赚钱实战项目等你来,一起探寻副业快速变现的途径;以及对接互联网大厂商务合作,一起来搞点小外快,认识更多互联网大咖)
目前群里已经带很多小伙伴(大部分大学生)变现几百块啦,程序员搞副业有额外加成~
对副业感兴趣可+V : suiyuan2ying 拉你进群。

文章目录

在当今科技快速发展的背景下,大型语言模型(LLM)正逐渐成为深度学习领域的重要力量。它们不仅在自然语言处理(NLP)方面表现突出,还在计算机视觉(CV)、多模态学习和科学计算等领域显示出了巨大的潜力。

1 开源模型Llama3.1

开源LLM的生态系统非常活跃,出现了很多引人注目的模型,比如国际上的LLaMA和Alpaca,以及国内的ChatGLM、BaiChuan和InternLM(书生·浦语)等。

这些开源模型给开发者提供了在本地进行部署和定制的机会,帮助我们构建出具有独特价值的应用。

2024年7月23日,Meta公司推出了Llama 3.1系列,标志着开源模型发展的一个新阶段。

特别是Llama 3.1 405B模型,拥有惊人的4050亿参数和128K Tokens的上下文长度,成为Meta迄今为止最大的模型之一。

这个模型的训练过程涉及超过15万亿的Tokens和1.6万个H100 GPU,这在行业中是前所未有的。

与之前的模型相比,Llama 3.1在规模和性能上都有了显著提升,展现出在多种任务中的卓越灵活性。

在这里插入图片描述

作为Java开发工程师,这一系列模型的发布为我们带来了新的机会。我们可以利用这些强大的工具,构建更智能、更高效的系统。

这也给我们带来了新的挑战,比如如何优化这些模型以适应特定的应用场景,以及如何确保模型的可解释性和安全性。

随着技术的不断进步,我们有理由相信,未来将会有更多的创新和突破等待着我们去探索。

2 部署流程

(1)创建实例。

在这里插入图片描述

(2)进入创建页面后,首先在实例配置中选择付费类型,一般短期需求可以选择按量付费或者包日,长期需求可以选择包月套餐。

在这里插入图片描述

(3)选择GPU数量和需求的GPU型号,首次创建实例推荐选择:

  • 按量付费–GPU数量1–NVIDIA-GeForc-RTX-4090,该配置为60GB内存,24GB的显存(本次测试的LLaMA3.1 8B 版本至少需要GPU显存16G)。
  • 配置数据硬盘的大小,每个实例默认附带了50GB的数据硬盘,首次创建可以就选择默认大小50GB。
在这里插入图片描述

(4)继续选择安装的镜像,平台提供了一些基础镜像供快速启动,镜像中安装了对应的基础环境和框架,可通过勾选来筛选框架,这里筛选PyTorch,选择PyTorch 2.4.0。

在这里插入图片描述

(5)为保证安全登录,创建密钥对,输入自定义的名称,然后选择自动创建并将创建好的私钥保存的自己电脑中并将后缀改为.pem,以便后续本地连接使用。

在这里插入图片描述

(6)创建好密钥对后,选择刚刚创建好的密钥对,并点击立即创建,等待一段时间后即可启动成功!

在这里插入图片描述

3 登录实例

(1)等待实例创建成功,在 GPU云实例 中查看实例信息。

在这里插入图片描述

(2)平台提供了在线访问实例的 JupyterLab 入口,可以直接登录实例:

在这里插入图片描述

(3)登录后一般会在 /root/workspace 目录下,服务器各个路径具体意义如下:

  1. /:系统盘,替换镜像,重置系统时系统盘数据都会重置。
  2. /root/workspace:数据盘,支持扩容,保存镜像时此处数据不会重置。
  3. /root/shared-storage:共享文件存储,可跨实例存储。
    • 用户名:root
    • 远程主机域名或IP(这里使用host域名):实例页面获取
    • 端口号:实例页面获取
    • 登录密码或密钥(这里使用密钥):前面创建实例时保存到本地的密钥

SSH登录:SSH只是登录方式,工具可以是系统自带终端、Xshell、MobaXterm等。SSH登录一般需要以下 4 个信息:在实例页面获取主机host和端口号:

在这里插入图片描述

复制结果类似如下:

ssh -p 31729 [email protected] 

其中,gpu-s277r6fyqd.ssh.damodel.com 即主机host,31729 为端口号。

终端登录方式详见SSH登录与密钥对

4 部署LLama3.1

(1)使用 conda 管理环境,DAMODEL示例已经默认安装了 conda 24.5.0 ,直接创建环境即可:

conda create -n llama3 python=3.12
在这里插入图片描述

(2)环境创建好后,使用如下命令切换到新创建的环境:

conda activate llama3 
在这里插入图片描述

(3)继续安装部署LLama3.1需要的依赖:

pip installlangchain==0.1.15 pip installstreamlit==1.36.0 pip installtransformers==4.44.0 pip installaccelerate==0.32.1 
在这里插入图片描述

(4)安装好后,下载 Llama-3.1-8B 模型,平台已预制Llama-3.1-8B-Instruct模型,执行以下命令即可内网高速下载:

wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar 

(5)下载完成后解压缩/Llama-3.1-8B-Instruct.tar

tar -xf Llama-3.1-8B-Instruct.tar 

5 使用教程

(1)模型下载好后,准备加载模型及启动Web服务等工作,新建 llamaBot.py 文件并在其中输入以下内容:

from transformers import AutoTokenizer, AutoModelForCausalLM import torch import streamlit as st # 创建一个标题和一个副标题 st.title("💬 LLaMA3.1 Chatbot") st.caption("🚀 A streamlit chatbot powered by Self-LLM")# 定义模型路径 mode_name_or_path ='/root/workspace/Llama-3.1-8B-Instruct'# 定义一个函数,用于获取模型和[email protected]_resourcedefget_model():# 从预训练的模型中获取tokenizer tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True) tokenizer.pad_token = tokenizer.eos_token # 从预训练的模型中获取模型,并设置模型参数 model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16).cuda()return tokenizer, model # 加载LLaMA3的model和tokenizer tokenizer, model = get_model()# 如果session_state中没有"messages",则创建一个包含默认消息的列表if"messages"notin st.session_state: st.session_state["messages"]=[]# 遍历session_state中的所有消息,并显示在聊天界面上for msg in st.session_state.messages: st.chat_message(msg["role"]).write(msg["content"])# 如果用户在聊天输入框中输入了内容,则执行以下操作if prompt := st.chat_input():# 在聊天界面上显示用户的输入 st.chat_message("user").write(prompt)# 将用户输入添加到session_state中的messages列表中 st.session_state.messages.append({"role":"user","content": prompt})# 将对话输入模型,获得返回 input_ids = tokenizer.apply_chat_template(st.session_state["messages"],tokenize=False,add_generation_prompt=True) model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda') generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512) generated_ids =[ output_ids[len(input_ids):]for input_ids, output_ids inzip(model_inputs.input_ids, generated_ids)] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]# 将模型的输出添加到session_state中的messages列表中 st.session_state.messages.append({"role":"assistant","content": response})# 在聊天界面上显示模型的输出 st.chat_message("assistant").write(response)print(st.session_state)

(2)在终端中运行以下命令,启动 streamlit 服务,server.port 可以更换端口:

streamlit run llamaBot.py --server.address 0.0.0.0 --server.port 1024
需注意服务地址务必指定位0.0.0.0,否则无法通过浏览器访问

接下来我们需要通过丹摩平台提供的端口映射能力,把内网端口映射到公网;

进入GPU 云实例页面,点击操作-更多-访问控制:

在这里插入图片描述

点击添加端口,添加streamlit服务对应端口:

在这里插入图片描述

添加成功后,通过访问链接即即可打开LLaMA3.1 Chatbot交互界面,并与其对话:

在这里插入图片描述

Read more

C++ STL容器详解:从入门到精通

C++ STL容器详解:从入门到精通

C++ STL容器详解:从入门到精通 一、STL容器概述 STL(Standard Template Library,标准模板库)是C++标准库的核心组件,提供了一套高效、可复用的数据结构和算法。STL容器作为其重要组成部分,用于存储和管理数据集合,遵循泛型编程思想,通过模板实现类型无关性。 STL核心组件 * 容器(Containers):存放数据的结构,如vector、list、map等 * 算法(Algorithms):如sort、find、accumulate等(头文件<algorithm>) * 迭代器(Iterators):连接算法与容器的"指针风格"对象 * 函数对象/谓词:比较器、定制规则(常用lambda表达式) * 适配器:容器/迭代器/函数的包装器

By Ne0inhk

PLI接口与VCS调试生态:连接Verilog与C/C++的魔法桥梁

PLI接口与VCS调试生态:连接Verilog与C/C++的魔法桥梁 在芯片验证的世界里,效率就是生命线。当传统的Verilog验证遇到性能瓶颈时,PLI(Programming Language Interface)技术就像一把瑞士军刀,为验证工程师打开了通往高性能验证的新天地。想象一下,你正在验证一个AI加速器设计,需要在仿真中实时处理数百万个神经元的数据交互——纯Verilog可能让你陷入性能泥潭,而PLI与VCS的结合却能让你游刃有余。 1. PLI技术核心:跨越语言边界的桥梁 PLI的本质是让Verilog具备调用外部C/C++函数的能力,就像在Python中调用NumPy一样自然。这种能力不是简单的接口对接,而是深度的语言级融合。通过三个关键机制实现: * TF(Task/Function)例程:处理$display等系统任务 * ACC(Access)例程:直接访问Verilog内部数据结构 * VPI(Verilog Procedural Interface):新一代更强大的接口标准 实际开发中,一个典型的PLI函数生命周期是这样的: #includ

By Ne0inhk
【C++】类和对象(中)

【C++】类和对象(中)

一、类的默认成员函数 编译器会自动生成的成员函数称为默认成员函数。一个类,不写的情况下编译器会默认生成以下6个默认成员函数。另外在C++11中,增加了两个默认成员函数,移动构造和移动赋值。默认成员函数从两方面学习: 1. 我们不写时,编译器默认生成的函数行为是啥?满足我们的需求吗? 编译器默认生成的函数不满足我们的需求,那如何自己实现? 二、构造函数 构造函数主要任务是对象实例化时初始化对象。就像每次写栈或队列时需要初始化Stack Init()、Queue Init(),用了构造函数就不需要写这一步。 构造函数的特点:函数名与类名相同:类class Stack,类中的函数Stack()无返回值。也无void对象实例化时系统会自动调用对应的构造函数构造函数可以重载如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成无参构造函数、全缺省构造函数、我们不写构造时编译器默认生成的构造函数,都叫做默认构造函数。但是这三个函数有且只有一个存在,不能同时存在。无参构造函数和全缺省构造函数虽然构成函数重载,但是调用时会存在歧

By Ne0inhk
【C++】第二十六节—C++11(中) | 右值引用和移动语义(续集)+lambda

【C++】第二十六节—C++11(中) | 右值引用和移动语义(续集)+lambda

Hi,我是云边有个稻草人,C++领域博主与你分享专业知识(*^▽^*) 《C++》本篇文章所属专栏—持续更新中—欢迎订阅~ 目录 上节总览,详情见—>【C++】第二十五节—C++11 (上) | 详解列表初始化+右值引用和移动语义 本节总览 (4)右值引用和移动语义在传参中的提效 6. 类型分类 7. 引用折叠 8. 完美转发 四、lambda 1. lambda表达式语法 2. lambda的应用 3. 捕捉列表 4. lambda的原理 接着上节,正文开始—— (4)右值引用和移动语义在传参中的提效 * 查看STL文档我们发现C++11以后容器的push和insert系列的接口否增加的右值引用版本 * 当实参是一个左值时,容器内部继续调用拷贝构造进行拷贝,将对象拷贝到容器空间中的对象 * 当实参是一个右值,容器内部则调用移动构造,右值对象的资源到容器空间的对象上

By Ne0inhk