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

news2025/7/19 14:09:14

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.coloradmin.cn/o/1055085.html

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

相关文章

yolov5分割+检测c++ qt 中部署,以opencv方式(详细代码(全)+复制可用)

1&#xff1a;版本说明&#xff1a; qt 5.12.10 opencv 4.5.3 &#xff08;yolov5模型部署要求opencv>4.5.0&#xff09; 2&#xff1a;检测的代码 yolo.h #pragma once #include<iostream> #include<cmath> #include<vector> #include <opencv2/…

Spring的注解开发-非自定义Bean的配置

非自定义Bean注解开发 非自定义Bean不能象自定义Bean一样使用Component注解及其衍生注解进行管理&#xff0c;非自定义Bean要通过工厂的方式进行实例化&#xff0c;使用Bean标注即可&#xff0c;Bean的属性为beanName&#xff0c;使用Bean注解作用在方法中&#xff0c;通过定义…

一个高精度24位ADC芯片ADS1222的使用方法及参考电路程序成都控制器定制

前一段时间&#xff0c;在做单片机、PLC、电路板、控制器/箱、仪器仪表、机电设备或系统、自动化、工控、传感、数据采集、自控系统、控制系统&#xff0c;物联网&#xff0c;电子产品&#xff0c;软件、APP开发设计定制定做开发项目时&#xff0c;有要求用到24位的高精度ADC&a…

Flutter笔记 - 用于描述Align的Alignment、AlignmentDirectional、AlignmentTween类

Flutter笔记 用于描述Align的Alignment、AlignmentDirectional、AlignmentTween类 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_…

问题: 视频颜色问题,偏绿

参考 什么是杜比视界&#xff1f; - https://www.youtube.com/watch?vldXDQ6VlC7g 【哈士亓说】07&#xff1a;HDR、杜比视界究竟是个啥&#xff1f;为什么这个视频还不是HDR视频&#xff1f; - https://www.youtube.com/watch?vrgb9Xg3cJns 正文 视频应该是 杜比视界 电…

【C++漂流记】C++对象模型和this指针

C中对象模型和this指针是面向对象编程中的重要概念。对象模型描述了对象在内存中的布局和行为&#xff0c;包括成员变量和成员函数的存储方式和访问权限。this指针是一个隐含的指针&#xff0c;指向当前对象的地址&#xff0c;用于在成员函数中引用当前对象的成员变量和成员函数…

力扣 -- 416. 分割等和子集(01背包问题)

解题步骤&#xff1a; 参考代码&#xff1a; 未优化代码&#xff1a; class Solution { public:bool canPartition(vector<int>& nums) {int nnums.size();int sum0;for(const auto& e:nums){sume;}if(sum%21){return false;}int aimsum/2;//多开一行&#xff…

前端页面初步开发

<template><div><el-card class"box-card" style"height: 620px"><el-input v-model"query.name" style"width:200px" placeholder"请输入用户姓名"></el-input>&nbsp&nbsp&nbsp…

cesium 雷达扫描 (线行扩散效果)

cesium 雷达扫描 (线行扩散效果) 1、实现方法 使用ellipse方法加载圆型,修改ellipse中material方法来实现效果 2、示例代码 2.1、 <!DOCTYPE html> <html lang="en"><head><<

[Spring] Spring5——IOC 简介(二)

目录 六、工厂 Bean&#xff08;Factory&#xff09; 1、普通 bean 2、工厂 bean 3、示例 七、Bean 的作用域 1、单例和多例 2、如何设置为单实例或多实例 八、Bean 的生命周期 1、生命周期 2、生命周期示例 3、Bean 的后置处理器 4、后置处理器示例 九、XML 的自…

JavaScript设计模式

✨JavaScript设计模式 &#x1f380;设计模式 在 面向对象软件设计中针对特定问题的简洁而优雅的解决方案 &#x1f390;常见的设计模式 &#x1f384;1. 工厂模式 在JavaScript中&#xff0c;工厂模式的表现形式就是一个调用即可返回新对象的函数 // ------------- 工厂模…

gitlab配置webhook限制提交注释

一、打开gitlab相关配置项 vim /etc/gitlab/gitlab.rb gitlab_shell[custom_hooks_dir] "/etc/gitlab/custom_hooks" 二、创建相关文件夹 mkdir -p /etc/gitlab/custom_hooks mkdir -p /etc/gitlab/custom_hooks/post-receive.d mkdir -p /etc/gitlab/custom_h…

springboot和vue:九、v-for中的key+vue组件化开发

v-for中的key 目的 现在想要实现这样的一种效果&#xff0c;页面上存在初始姓名表单&#xff0c;同时存在输入框&#xff0c;输入姓名后点击添加按钮可以将新输入的姓名加入显示的姓名表单中。 代码 <!DOCTYPE html> <html lang"en"><head><…

数学建模Matlab之数据预处理方法

本文综合代码来自文章http://t.csdnimg.cn/P5zOD 异常值与缺失值处理 %% 数据修复 % 判断缺失值和异常值并修复&#xff0c;顺便光滑噪音&#xff0c;渡边笔记 clc,clear;close all; x 0:0.06:10; y sin(x)0.2*rand(size(x)); y(22:34) NaN; % 模拟缺失值 y(89:95) 50;% 模…

Mars3d的graphic/entity/model示例的glb的ModelEntity修改颜色失效说明

1.Mars3d的graphic/entity/model示例的glb的ModelEntity修改颜色失效说明 2.测试时发现示例的glb的ModelEntity使用setStyle()修改颜色没成功 setTimeout(() > { graphicModel.setStyle({ color: "red" }) }, 500) 相关链接 1.http://mars3d.cn/editor-vue.html?…

使用sqlmap总是提示需要302跳转重新登录的解决方法

如果在命令中不指定cookie&#xff0c;sqlmap在执行时会提示需要重新登录 如果给了cookie但发现还是提示需要重新登录&#xff0c;且按它给的提示发现还是找不到注入点&#xff0c;原因是url没有加引号 url加了双引号后解决问题

MySQL在线修改表结构-PerconaTookit工具

在线修改表结构必须慎重 在业务系统 运行 过程中随意删改字段&#xff0c;会 造成重大事故。 常规的做法是&#xff1a;业务停机&#xff0c;再 维护表结构 比如&#xff1a;12306 凌晨 0 点到早上 7 点是停机维护 如果是不影响正常业务的表结构是允许在线修改的。 比如&…

16数据处理

plotly 设置x/y轴名称 yaxis_title‘金额(元)’,xaxis_title‘日期’ fig px.line(df_grouped, x"Order_time", y"Money", title日销图) fig.update_layout(yaxis_title金额(元),xaxis_title日期, xaxis_tickformat%Y-%m-%d,yaxis_tickformat 0.2f) fig…

多线程案例 - 单例模式

单例模式 ~~ 单例模式是常见的设计模式之一 什么是设计模式 你知道象棋,五子棋,围棋吗?如果,你想下好围棋,你就不得不了解一个东西,”棋谱”,设计模式好比围棋中的 “棋谱”. 在棋谱里面,大佬们,把一些常见的对局场景,都给推演出来了,照着棋谱来下棋,基本上棋力就不会差到哪…

面试必考精华版Leetcode437. 路径总和 III

题目&#xff1a; 代码&#xff08;首刷看解析&#xff0c;暴力法&#xff09;&#xff1a; class Solution { public:long rootSum(TreeNode* root,long targetSum){if(!root) return 0;long res0;if(root->valtargetSum){res;} resrootSum(root->left,targetSum-root-…