【通意千问】大模型GitHub开源工程学习笔记(1)--依赖库

9月25日,阿里云开源通义千问140亿参数模型Qwen-14B及其对话模型Qwen-14B-Chat,免费可商用。

立马就到了GitHub去fork。

GitHub:

GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud.

官方的技术资料也下载了,看这里==>https://qianwen-res.oss-cn-beijing.aliyuncs.com/QWEN_TECHNICAL_REPORT.pdf

 这个模型的表现怎么样?

Qwen-14B和Qwen-7B模型相比同规模模型表现更好,其能力包括自然语言理解、知识、数学计算和推理、代码生成、逻辑推理等。虽然Qwen-14B仍与GPT-3.5和GPT-4有差距,但表现不俗。实验结果见表格,更多细节请查看技术备忘录:https://qianwen-res.oss-cn-beijing.aliyuncs.com/QWEN_TECHNICAL_REPORT.pdf。

 

学习或调试大模型需要【安装哪些软件】? 

  • python 3.8及以上版本
  • pytorch 1.12及以上版本,推荐2.0及以上版本
  • 建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)

【安装pytorch】 传送门==>pytorch 下载安装全流程详细教程_pytorch官网下载教程_Deep Learning小舟的博客-CSDN博客

该装的都装好了?好的,上车吧!

快!快告诉我【如何使用】大模型!

提供简单的示例来说明如何利用🤖 ModelScope和🤗 Transformers快速使用Qwen-7B和Qwen-7B-Chat。

ModelScope是一个开源平台,允许用户在生产中可视化、监视和分析机器学习模型。

看这里==>https://github.com/modelscope/modelscope

依赖库的安装 

看看都需要安装哪些依赖库。在工程中有一个文件叫做requirements.txt,打开

【transformers】

Transformers提供API和工具,方便下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本、碳足迹,并节省训练模型所需的时间和资源。这些模型支持不同类型的常见任务,例如:

📝 自然语言处理:文本分类、命名实体识别、问答、语言建模、摘要、翻译、多项选择和文本生成。
🖼️ 计算机视觉:图像分类、目标检测和分割。
🗣️ 音频:自动语音识别和音频分类。
🐙 多模态:表格问答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问答。

传送门==>https://huggingface.co/docs/transformers/index

【accelerate】

Accelerate是一个库,通过添加仅四行代码,使得相同的PyTorch代码可以在任何分布式配置下运行!简而言之,实现规模化的训练和推理变得简单、高效和适应性强。

传送门==>https://huggingface.co/docs/accelerate/index

【tiktoken 】

tiktoken是一个快速的BPE分词器,可与OpenAI的模型配合使用。

传送门==>https://github.com/openai/tiktoken

【einops 】

灵活强大的张量操作,使代码易读且可靠。支持numpy、pytorch、tensorflow、jax等多种框架。

传送门==>einops · PyPI 

【transformers-stream-generator】

这是一种基于Huggingface/Transformers的文本生成方法,它返回一个生成器,在推理期间实时流出每个标记。

传送门==>transformers-stream-generator · PyPI

【scipy】

SciPy提供了用于优化、积分、插值、特征值问题、代数方程、微分方程、统计学和许多其他类别问题的算法。

传送门==>SciPy

 【安装以上依赖库】,打开cmd,cd到工程目录路径下,输入如下命令行代码

pip install -r requirements.txt

安装flash-attention(可选)

什么是flash-attention?

我们看看论文的摘要==>https://arxiv.org/abs/2205.14135

在处理长序列时,Transformer模型既慢又占用大量内存,因为自注意力机制的时间和内存复杂度都与序列长度呈二次关系。近似注意力方法试图通过牺牲模型质量来降低计算复杂度以解决这个问题,但通常并不能实现实际的速度提升。我们认为,缺少的原则是使注意力算法具有IO意识--考虑到GPU内存各级之间的读写。我们提出了FlashAttention,这是一种IO意识的精确注意力算法,它使用切块技术来减少GPU高带宽内存(HBM)和GPU片上SRAM之间的内存读写次数。我们分析了FlashAttention的IO复杂性,结果显示,它比标准注意力机制需要更少的HBM访问,并且对于一定范围的SRAM大小是最优的。我们还将FlashAttention扩展到了块稀疏注意力,从而得到了一种比现有任何近似注意力方法都更快的近似注意力算法。FlashAttention比现有基线训练Transformer更快:与MLPerf 1.1训练速度记录相比,在BERT-large(序列长度512)上实现了15%的端到端实际速度提升,在GPT-2(序列长度1K)上实现了3倍的速度提升,在长距离竞技场(序列长度1K-4K)上实现了2.4倍的速度提升。FlashAttention和块稀疏FlashAttention使Transformer能够处理更长的上下文,从而产生更高质量的模型(在GPT-2上提高了0.7的困惑度,在长文档分类上提高了6.4个百分点)并且具有全新的能力:它是首个在Path-X挑战(序列长度16K,准确率61.4%)和Path-256(序列长度64K,准确率63.1%)上实现超过偶然性表现的Transformer。

什么是注意力算法?

 自注意机制:一种允许神经网络根据它们相互关联的重要性来权衡输入序列的不同部分的机制,而不依赖于固定的窗口大小或卷积操作。

那么注意力算法就是...

近似注意力方法:旨在通过近似注意力权重来减少Transformer模型中自注意力机制的计算和内存需求的方法。

(姑且认为自己懂了吧 )

如果你的显卡支持fp16或bf16精度,我们还推荐安装flash-attention来提高你的运行效率以及降低显存占用。(flash-attention只是可选项,不安装也可正常运行该项目)

显卡支持 fp16 或 bf16 精度

其中 fp16 是指半精度浮点数,它的存储空间只有单精度浮点数的一半,但表示的数值范围和精度较小;bf16 是指bfloat16,它是一种浮点数格式,它可以在减少数据大小的同时保留可用于深度学习等任务的有效位数。这些精度通常用于深度学习等应用,可以提高计算效率和降低内存占用。

安装指令如下

git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 下方安装可选,安装可能比较缓慢。
# pip install csrc/layer_norm
# pip install csrc/rotary

安装问题:在使用pip install . 进行安装时,提示“RuntimeError: flash_attn was requested, but nvcc was not found.  Are you sure your environment has nvcc available?  If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.”

nvcc是什么东东?

`nvcc` 是 NVIDIA CUDA 编译器的命令行工具。CUDA 是一种由 NVIDIA 开发的并行计算平台和应用程序编程接口,用于利用 NVIDIA GPU(图形处理单元)的计算能力来加速各种计算任务,特别是科学计算和深度学习等高性能计算任务。

`nvcc` 允许开发者编译和构建使用 CUDA 编写的程序。它可以处理包含 CUDA C/C++ 代码的源文件,并将其编译成可以在 NVIDIA GPU 上运行的可执行文件。CUDA C/C++ 是一种扩展了标准 C/C++ 语言的编程语言,允许开发者编写能够在 GPU 上并行执行的代码。

使用 `nvcc`,开发者可以指定编译器选项、链接库和其他配置来构建 CUDA 程序。这使得开发者能够充分利用 GPU 的并行性能,加速各种计算任务,包括图形处理、科学计算、深度学习神经网络训练等。

通常,开发者会在命令行中使用 `nvcc` 来编译和构建他们的 CUDA 项目,类似于以下方式:

```
nvcc my_cuda_program.cu -o my_cuda_executable
```

这将把名为 `my_cuda_program.cu` 的 CUDA 源文件编译成一个名为 `my_cuda_executable` 的可执行文件,该文件可以在支持 CUDA 的 NVIDIA GPU 上运行。

 难道我没有正确安装cuda?

打开命令行,输入''nvidia-smi''

明明显示我的CUDA版本12.1啊(其实,这是系统支持的CUDA版本,不代表你已经安装了CUDA Toolkit)

再在命令行中输入“nvcc --v”,回车!

 提示“nvcc”不是内部或外部命令也不是可运行的程序或批处理文件

那就是没有安装CUDA Toolkit

【如何安装CUDA】传送门==>CUDA安装教程(超详细)_Billie使劲学的博客-CSDN博客

 安装完成!

 然后,接着在flash-attention路径下通过“pip install .”来安装

完成后通过“pip list”产看是否安装成功!(列表中有【flash-attn】,版本为【1.0.8】,表示安装成功了)

至此,我们安装了所有使用模型所需的依赖库和软件,接下来,可以正式上车了么?(to be continued)

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

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

相关文章

14:STM32-----看门狗

目录 一:看门狗 1:WDG 2:独立看门狗 (IWDG) A:IWDG框图 B:IWDG_KR键寄存器 C:IWDG超时时间 3:窗口看门狗 (WWDG) A:WWDG框图 B:WWDG工作特性 C:WWDG超时时间 4:独立看门狗和窗口看门狗的区别 5:数据手册 二:案例 A:独立看门狗 1:连接图 2:步骤 3:函数介绍 3:代…

Python脚本实现xss攻击

实验环境:zd靶场、vscode 知识点 requests.session() 首先我们需要先利用python requests模块进行登录,然后利用开启session记录,保持之后的操作处于同一会话当中 requests.session()用于创建一个会话(session)的实例对象。使用requests库…

Unity 鼠标悬浮时文本滚动(Text Mesh Pro)

效果 直接将脚本挂载在Text Mesh Pro上,但是需要滚动的文本必须在Scroll View中,否侧会定位错误,还需要给Scroll View中看需求添加垂直或者水平布局的组件 代码 using System.Collections; using System.Collections.Generic; using UnityE…

1.物联网射频识别,RFID概念、组成、中间件、标准,全球物品编码——EPC码

1.RFID概念 RFID是Radio Frequency Identification的缩写,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需与被识别物体建立机械或光学接触。 RFID(Radio Frequency Identificati…

linux 清除卸载jenkins

1、停服务进程 查看jenkins服务是否在运行,如果在运行,停掉 查看服务 ps -ef|grep jenkins 停掉进程 kill -9 XXX2、查找安装目录 find / -name "jenkins*"3、删掉相关目录 删掉相关安装目录 rm -rf /root/.jenkins/# 删掉war包 rm -rf /…

GD32F10X ----RTC

1. RTC的简介 STM32 的实时时钟(RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC 模块和时钟配置…

详解Avast Driver Updater:电脑驱动更新工具的利器还是多余的软件?

亲爱的读者朋友们,你是不是经常为电脑的驱动问题而烦恼?如果是的话,你可能会对这款软件——Avast Driver Updater 电脑驱动更新工具感兴趣。但在你决定尝试之前,不妨先和我一起深入探讨一下它的优点、缺点以及它适用的使用场景。 …

【夏虫语冰】测试服务器端口是否打开(命令行、Python)

文章目录 1、简介2、命令行2.1 telnet2.1.1 工具简介2.1.2 工具配置2.1.3 工具使用 2.2 curl2.2.1 工具简介2.2.1 工具下载2.2.1 工具使用 2.3 wget2.3.1 工具简介2.3.2 工具下载2.3.2 工具使用 2.4 nc2.4.1 工具简介2.4.2 工具安装2.4.3 工具使用 2.5 ssh2.5.1 工具简介2.5.2 …

动态规划算法(1)--矩阵连乘和凸多边形剖分

目录 一、动态数组 1、创建动态数组 2、添加元素 3、删除修改元素 4、访问元素 5、返回数组长度 6、for each遍历数组 二、输入多个数字 1、正则表达式 2、has.next()方法 三、矩阵连乘 1、什么是矩阵连乘? 2、动态规划思路 3、手推m和s矩阵 4、完…

番外4:VMware安装

step4: 安装过程中,有些选项不需要点(安装地址建议选C盘或默认,装载在其他盘后续会报错),如: may error(本人猜测安装虚拟机完整版需要C盘的一些桥插件支持): step5: 安装虚拟机成功…

给奶牛做直播之三

​一、前言 上一篇给牛奶做直播之二 主要讲用RTMP搭建点播服务器,整了半天直播还没上场,今天不讲太多理论的玩意,奶牛今天放假了也不出场,就由本人亲自上场来个直播首秀,见下图,如果有兴趣的话&#xff0…

Android修行手册 - Activity 在 Java 和 Kotlin 中怎么写构造参数

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

大喜国庆,聊聊我正式进入职场的这三个月...

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

实现三栏布局的十种方式

本文节选自我的博客:实现三栏布局的十种方式 💖 作者简介:大家好,我是MilesChen,偏前端的全栈开发者。📝 CSDN主页:爱吃糖的猫🔥📣 我的博客:爱吃糖的猫&…

02-Zookeeper实战

上一篇:01-Zookeeper特性与节点数据类型详解 1. zookeeper安装 Step1: 配置JAVA环境,检验环境: java -versionStep2: 下载解压 zookeeper wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeepe…

番外5:下载+安装+配置Linux

任务前期工作: 01. 电脑已安装好VMware Workstation软件; 02.提前下载好Rhel-8.iso映像文件(文件较大一般在9.4GB,建议采用迅雷下载),本人使用的以下版本(地址ed2k://|file|rhel-8.4-x86_64-dvd…

C++-哈希Hash

本期我们来学习哈希 目录 unordered系列关联式容器 unordered_map unordered_set 性能比较 哈希概念 哈希冲突 哈希函数 哈希冲突解决 闭散列 模拟实现 开散列 模拟实现 全部代码 unordered系列关联式容器 在 C98 中, STL 提供了底层为红黑树结构的一…

【算法基础】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序

目录 1 冒泡排序(Bubble Sort) 2 插入排序(Insertion Sort) 3 选择排序(Selection Sort) 4. 快速排序(Quick Sort) 5. 归并排序(Merge Sort) 6 堆排序 …

【day10.01】使用select实现服务器并发

用select实现服务器并发&#xff1a; linuxlinux:~/study/1001$ cat server.c #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8880#define IP "192.168.31.38"int main(int argc, c…

11链表-迭代与递归

目录 LeetCode之路——206. 反转链表 分析&#xff1a; 解法一&#xff1a;迭代 解法二&#xff1a;递归 LeetCode之路——206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head […