AI大模型基础环境搭建

news2024/9/30 5:38:30

文章目录

  • AI大模型基础环境搭建
    • 简介
    • 下面是搭建
    • 大模型基础环境
      • 大模型基础环境通常会依赖以下package:
      • conda安装
      • demo环境搭建
      • 关于该git项目需要注意的一些点
      • 前后端封装

AI大模型基础环境搭建

简介

简单描述一下本文章里会教大家做的东西
1、搭建大模型基础环境
2、fastapi 封装接口 + 前端页面,做自己的语言模型
3、github地址: https://github.com/lisiqil/start-chart

一点废话:

  • 本人手里也没有合适跑AI模型的机器,是在腾讯云上薅了一个新用户的福利,几十块租了一星期练手。后面机器到期了所以没法发链接给读者亲身体验,不过一些步骤有截图记录,同时项目上传了github仓库,会提供git地址。跑了 starchat(语言模型) 和 clip(图像识别)两个模型。

  • 套壳后的 startchat ,如图:(哈哈)
    在这里插入图片描述

  • 看一下运行时的显存(跑起来差不多用了18个G)
    请添加图片描述

  • 这个是完整页面,前端页面有一些可调参数
    请添加图片描述

  • clip 运行的情况 (clip 相对没 starchat 这么吃显存)
    在这里插入图片描述
    在这里插入图片描述

  • 应用的 github 地址:
    https://github.com/lisiqil/start-chart

下面是搭建

大模型基础环境

大模型基础环境通常会依赖以下package:

  • PyTorch:PyTorch是一个用于深度学习的开源库,由Facebook AI Research开发。PyTorch广泛用于自然语言处理、计算机视觉和语音识别等领域。

  • torchvision:torchvision是一个用于计算机视觉任务的库,提供了图像和视频处理的各种功能。torchvision基于PyTorch构建,方便在PyTorch项目中使用。

  • torchaudio:torchaudio是一个用于音频处理的库,提供了对音频信号进行处理的函数和预训练模型。。torchaudio也基于PyTorch构建,可以在PyTorch项目中轻松集成。

  • CUDA:CUDA是NVIDIA开发的一种并行计算平台和API模型,用于在NVIDIA GPU上加速计算任务。它允许开发人员编写在GPU上运行的代码,从而加快计算速度。PyTorch等深度学习库通常使用CUDA来进行GPU加速。

结合所选取的大模型,参考 https://pytorch.org/get-started/previous-versions/ 选取合适的环境package组合。

  • Bitsandbytes:提供高效的位操作和字节操作功能。它可以帮助开发人员更轻松地处理二进制数据和进行位级操作。

很多情况大模型所需要的服务器配额我们是无法满足的,这个时候需要bitsandbytes降低推理精度以达到降低所需显存配额的目的。

conda安装

如果确保机器只归你一个人使用可以不用安装

  • 下载并安装anaconda,选择你需要的版本即可上机安装:https://repo.anaconda.com/archive/
    以Tlinux为例:下载Anaconda3-2023.07-2-Linux-x86_64.sh并执行,等待安装完成。
bash Anaconda3-2023.07-2-Linux-x86_64.sh
  • 是否安装成功
# 查看conda版本
conda --version
# 提示没有command,设置环境变量即可
# 获取conda的安装路径
# whereis conda
export PAHT=/usr/anconda/bin:$PATH
source ~/.bashrc
  • conda常用命令
# 查看当前存在的虚拟环境
conda env list
# 创建虚拟环境
conda create -n envName
# 激活虚拟环境
conda activate envName
# 退出虚拟环境
conda deactivate
# 删除虚拟环境
conda remove -n envName --all
# 虚拟环境中安装packge,以安装pytorch 1.13.1版本为例
conda install pytorch==1.13.1
# 更多的conda命令
conda --help

demo环境搭建

以cuda11.3为例搭建大模型运行环境。
说明,cuda11.3较为典型,在bitsandbytes中没有预先编译适配11.3的so。所以11.3的整个环境搭建具备完整环境搭建流程,适配所有cuda版本环境搭建。

# 默认情况下腾讯云服务器上镜像已经安装了nvidia驱动。
# 查询显卡信息,该命令将会输出当前显卡Driver Version,CUDA Version
nvidia-smi
# print CUDA Version: 11.4, 说明当前环境适配CUDA Version <= 11.4

# 下载并安装CUDA 11.3,需要注意的是:安装过程中会让你选择安装像,这里需要去除安装驱动。
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run
# 设置环境变量,通常/usr/local/cuda-1x.x/bin,/usr/local/cuda-1x.x/lib64
export PATH=/usr/local/cuda-11.3/bin:$PATH
source ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
# 或者将/usr/local/cuda-11.3/lib64添加到/etc/ld.so.conf

##### conda和pip安装二选一 start ####
# 参考https://pytorch.org/get-started/previous-versions/
# 1、conda
conda create -n starchat
conda activate starchat
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch

# 2、pip
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
#### conda和pip安装二选一 end ####

# 安装bitsandbytes
pip install bitsandbytes
# make对应版本的bitsandbytes
git clone https://github.com/timdettmers/bitsandbytes.git
cd bitsandbytes
CUDA_VERSION=11.3 make cuda11x
python setup.py install
CUDA_VERSION=11.3 make cuda11x_nomatmul
python setup.py install
# 编译好的so通常在build/lib/bitsandbytes路径下,libbitsandbytes_cuda113.so, libbitsandbytes_cuda113_nocublaslt.so
# 将这两个文件放在python/site-packages/bitsandbytes目录下
# 根据服务器环境复制到对应的目录下
#### start ####
# 1、conda
# 如conda环境中使用的python3.10
cp build/lib/bitsandbytes/libbitsandbytes_cuda113.so /root/.conda/envs/starchat/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cuda113.so
cp build/lib/bitsandbytes/libbitsandbytes_cuda113_nocublaslt.so /root/.conda/envs/starchat/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cuda113_nocublaslt.so
# 2、非conda,使用的是python3.8
cp build/lib/bitsandbytes/libbitsandbytes_cuda113.so /usr/local/lib64/python3.8/site-packages/bitsandbytes/libbitsandbytes_cuda113.so
cp build/lib/bitsandbytes/libbitsandbytes_cuda113_nocublaslt.so /usr/local/lib64/python3.8/site-packages/bitsandbytes/libbitsandbytes_cuda113_nocublaslt.so
#### end ####
# 测试bitsandbytes
python -m bitsandbytes
# success print:True
# 否则,这里可能存在两个缺少依赖的报错:
#   1、No module named 'scipy'。解决:pip install scipy
#   2、No module named 'triton.language'。解决:pip install triton
#     安装完成triton后依然报错相同的错误,那么需要修改下/usr/local/lib64/python3.8/site-packages/bitsandbytes/triton/triton_util.py关于引用importlib的方式
#     修改代码import importlib -> import importlib.util
#     没错,我为了安装这个环境已经把bitsandbytes源码看完了

# 整个环境已经搭建完成
# 关于如何开启8int方式运行大模型可以参考
#     https://github.com/timdettmers/bitsandbytes.git

至此demo中的大模型环境已经搭建完成。
大家可以在 huggingface 或者 百度飞浆 中获取自己想要的AI模型来愉快的玩耍

关于该git项目需要注意的一些点

cd 大模型目录
pip install -r requirements.txt
# 进入python命令行
python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True, torch_dtype=torch.float16)
model.to(device)
inputs = tokenizer.encode('现在我是javascript工程师,需要用nextjs实现文件上传,请你给出实现方案', return_tensors="pt").to(device)
outputs = model.generate(inputs, generation_config=generation_config)
output = tokenizer.decode(outputs[0], skip_special_tokens=False).rsplit(assistant_token, 1)[1].rstrip(end_token)
print(output)
"""
其实你会得到一个让你非常无语的答案,哈哈哈。
#1•用户登录成功后,点击头像可以进入个人中心页面。
在个人中心页面有一个上传文件的按钮,,用户点击该按钮就可以选择要上传的文件并将其显示在页面上。
import os
def upload_ file (request):
...
...
"""

遇到这种情况不要慌,并不是大模型的能力有问题。这个引入一个初学大模型的概念 prompt 就是所谓的工程提示,如果我们给出合理的提示功能标签,那么大模型可以更好的识别问题。

常见的LLM通用提示标签有

  • <|system|>: 系统级提示
  • <|user|>: 用户输入
  • <|assistant|>:ai回答
  • <|end|>:通用结束标签

那么以上问题,通过合理的 prompt 之后是:

#   “<|system|>你是一个javascript工程师<|end|>
#       <|user|>请用nextjs实现文件上传功能。<|end|>”

inputs 这里应该是:

inputs = tokenizer.encode(
    '<|system|>你是一个javascript工程师<|end|><|user|>请用nextjs实现文件上传功能。<|end|>', return_tensors="pt").to(device)
outputs = model.generate(inputs, generation_config=generation_config)
output = tokenizer.decode(outputs[0], 
  skip_special_tokens=False).rsplit(assistant_token, 1)[1].rstrip(end_token)
print(output)

前后端封装

前后端封装相对比较简单,主要干的就是:fastapi封装应用接口、大模型输出结果用接口返回给前端页面、前端页面收集到的问题和参数通过接口调用大模型。代码已传。

有点开发经验的同学应该能看懂,该文主要是分享记录大模型基础环境的搭建,就不赘述这部分内容啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM相关的面试题

一、什么是程序计数器 二、简要的介绍一下堆 三、什么是虚拟机栈 四、能不能解释下方法区 五、你听过直接内存吗&#xff1f; 六、什么是类加载器&#xff0c;类加载器有哪些 七、什么是双亲委派模型 八、JVM为什么采用双亲委派机制 九、类装载的执行过程 十、对象什么时候被垃…

Day982.各大开放平台是如何使用OAuth 2.0 -OAuth 2.0

各大开放平台是如何使用OAuth 2.0 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于各大开放平台是如何使用OAuth 2.0的内容。 “开放平台”&#xff0c;不难理解&#xff0c;它的作用就是企业把自己的业务能力主要以开放 API 的形式&#xff0c;赋能给外部开发者。而…

C++(Chapter 3)

C(三) 1.引用 1.引用的概念 引用的概念:引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 引用的语法:类型& 引用变量名(对象名) 引用实体 ; 例如: #i…

【OpenGL】七、混合

混合 文章目录 混合混合公式glBlendFunc&#xff08;混合函数&#xff09;glBlendFuncSeparate渲染半透明纹理 参考链接 混合(Blending)通常是实现物体透明度(Transparency)的一种技术 简而言之&#xff1a;混合就是如何将输出颜色和目标缓冲区颜色结合起来。 混合公式 C_fina…

Android 备忘录,记事本程序设计

android备忘录实现&#xff0c;使用ObjectBox数据库框架进行数据存储&#xff0c;增删改查等操作。代码使用kotlin编写。 1、下面看看ObjectBox数据库封装 需要注意的是&#xff1a; /** * 你只有配置好之后, 点击 Make Model 你的model名字, 才会创建 MyObjectBox对象 …

(十七)VBA常用基础知识:读写text文件

读取文件 1.1.数据准备 1.2 代码准备 Sub test()Dim buf As String, n As LongOpen "/Users/sixdog/Documents/VBA/test.txt" For Input As #1Do Until EOF(1)Line Input #1, bufn n 1Sheet1.Range("A" & n) bufLoopClose #1 End Sub1.3 执行结果…

在Unity中如何设置设备的高、中、低配

在开发游戏或应用程序时&#xff0c;考虑到不同设备的性能差异是至关重要的。Unity作为一种流行的游戏开发引擎&#xff0c;提供了一些方法来区分设备的高、中、低配&#xff0c;并相应地调整游戏的性能要求和图形质量。 以下是在Unity中实现这一目标的几种常用方法&#xff1…

【Linux】零基础入门Linux你所需要掌握的

文章目录 目录结构路径描述颜色区分Linux命令文件权限 目录结构 要了解Linux首先,必须要了解linux的目录层级结构,因为在linux中有一切皆文件"的思想. windows系统里面的文件具有各个盘符,如C盘,D盘等 而在Linux中,Linux的目录结构是一个树型结构 Linux没有盘符的概念,只…

程序的编译,链接,执行

目录 1.程序的翻译环境和执行环境 2.翻译环境 3.运行环境 1.程序的翻译环境和执行环境 当我们写出一段代码后&#xff0c;我们需要将代码运行起来。那在这个过程中文件是如何从代码变成可执行程序的呢&#xff1f; 在程序实现过程中中&#xff0c;存在两个环境&#xff1a;一…

Matlab安装必看,手把手教你安装matlab

目录 一 &#xff0c;Matlab介绍 二&#xff0c;安装matlab2021b 一 &#xff0c;Matlab介绍 Matlab是一种高级计算机语言和交互式环境&#xff0c;广泛用于科学、工程、金融和其他领域的数据分析、可视化和数值计算。它是由MathWorks公司开发的&#xff0c;最初发布于1984年…

【unity3D插件】Embedded Browser(ZFBrowser) — 快速实现PC端内嵌网页(有详细图解)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity3D插件—Embedded Browser 这里写自定义目录标题 下载基础知识基础操作使用公网网址加载一个网页①使用公网网址加载一个网页②使用…

IP子网到底怎么划分【全网最详解】!!!

在学习IP子网划分前&#xff0c;首先的明白以下几个基础概念&#xff1a; 1、IP地址组成 IP地址由32位二进制组成&#xff0c;32位二进制分成了4字节&#xff0c;每字节8位&#xff0c;字节之间用符.&#xff08;点&#xff09;分隔&#xff0c;为了方便人们记忆&#xff0c;经…

Leetcode刷题详解——搜索插入位置

1. 题目链接&#xff1a;35. 搜索插入位置 2. 题目描述&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

判断函数是否标记async

判断函数是否标记为async 今天看到这道题觉得蛮有意思的 就是说让你写一个工具类,让后这个工具类接收一个函数,判断这个函数是不是被async标记了 如下,我们先看看普通函数和被async标记的函数打印出来是啥样子 function isAsyncFunction(func) {console.log(func)}isAsyncFun…

css样式中 before、after 里面的 content 乱码

目录 一、问题 二、原因 三、总结 一、问题 1.代码在本地没有问题&#xff0c;打包放在线上在时候&#xff0c;竟然测试测的时候看到element的字体图标有时候显示乱码&#xff0c;如下图1-1所示。更奇葩的是偶现&#xff0c;只有测试看见了&#xff0c;很难复现。。。 图1-…

【网络协议】聊聊UDP协议

前面的几篇文章讲述了链路层和IP层&#xff0c;主要的话其实就是MAC地址&#xff0c;以及通过IP地址求MAC地址的ARP协议。PING的底层协议 ICMP 。动态分配IP协议 DHCP等。而从今天开始我们开始讲述传输层协议&#xff0c;传输层主要就是UDP和TCP。 TCP 和 UDP 有哪些区别&…

Bean转换工具MapStruct看这一篇就够了

内容持续更新中… 文章目录 1.背景2.mapstruct简介3.mapstruct与其他映射对比4.mapstruct底层原理解析5.具体使用和底层实现5.1 添加maven依赖5.2 对象转换1.UserA和UserB字段相同2.UserA和UserB字段不同3.多个源类4.子对象映射5.数据类型转换数据类型映射枚举映射 6.集合映射…

C语言KR圣经笔记 2.1变量名 2.2 数据类型和大小

第2章 类型、操作符和表达式 变量和常量是程序里操作的基本数据对象。声明列出了要使用的变量&#xff0c;并指出它们的类型&#xff0c;还可能赋初始值。而操作符指定了要对它们做什么。表达式把变量和常量结合起来产生新的值。一个对象的类型决定了它的取值范围以及能对它做…

Linux部署Redis哨兵集群 一主两从三哨兵(这里使用Redis6,其它版本类似)

目录 一、哨兵集群架构介绍二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、搭建Redis一主两从集群3.1、准备配置文件3.1.1、准备主节点6379配置文件3.1.2、准备从节点6380配置文件3.1.3、准备从节点6381配置文件 3.2、启动Redis主从…

【Kotlin精简】第6章 反射

1 反射简介 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性。 1.1 Kotlin反射 我们对比Kotlin和Java的反射类图。 1.1.1 Kotlin反射常用的数据结…