admin管理员组

文章数量:1607885

总结:

每周一记,每次进步一点点。

主要了解了大模型的综述,熟悉linux环境以及本地操控服务器运行vscode,跑通一些好玩的大模型。有时候自己怎么查都很困惑无法解决问题的时候,求助专业的人是非常有效的,不要不好意思。

本周知识清单:

  • 大模型发展历程
  • 魔搭平台使用
  • CodeQwen实现代码生成GitHub - QwenLM/CodeQwen1.5: CodeQwen1.5 is the code version of Qwen, the large language model series developed by Qwen team, Alibaba Cloud.
  • FunSAR实现语音识别GitHub - modelscope/FunASR: A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models, Supporting Speech Recognition, Voice Activity Detection, Text Post-processing etc.
  • 智谱CodeGeeX演示环境如何搭建

下周任务:

  • 大模型具体操作原理的细节
  • 使用swift来对模型进行微调, swift是魔搭社区官方提供的LLM&AIGC模型微调推理框架.快来与 CodeQwen1.5 结对编程-阿里云开发者社区 (aliyun)
  • 继续尝试智谱CodeGeeX演示环境如何搭建
  • 通义灵码演示环境

关键记录:

大模型发展历程

参考文献:A Survey of Large Language Models (Wayne Xin Zhao at al.)

4个发展阶段:

  • Statistical language models(SLMs)统计语言模型

基于20世纪90年代兴起的统计学习方法开发的。基本思想是基于马尔可夫假设建立单词预测模型,例如,基于最近的上下文预测下一个单词。固定的上下文长度为n的SLM也被称为n元语言模型,例如二元和三元语言模型。SLM已广泛应用于提高信息检索(IR) [8,9]和自然语言处理(NLP)[10–12]中的任务性能。然而,它们经常遭受维数灾难:很难精确估计高阶语言模型,因为需要估计指数数量的转移概率。因此,专门设计的平滑策略,如补偿估计[13]和Good-Turing估计[14]已被引入来缓解数据稀疏问题。

  • Neural language models (NLMs) 神经语言模型

NLMs[15–17]通过神经网络(如递归神经网络(RNNs))来描述单词序列的概率。作为一个显著的贡献,[15]中的工作引入了单词的分布式表示的概念,并建立了基于聚合上下文特征(即,分布式单词向量)的单词预测函数。通过扩展学习单词或句子的有效特征的思想,开发了一种通用神经网络方法来为各种NLP任务构建统一的解决方案[18]。此外,word2vec [19,20]被提议构建一个用于学习分布式单词表示的简化浅层神经网络,该网络被证明在各种NLP任务中非常有效。这些研究已经开始使用语言模型进行表征学习(超出单词序列建模),对NLP领域产生了重要影响。

  • Pre-trained language models (PLMs) 预训练语言模型

作为早期尝试,ELMo [21]提出通过首先预训练一个双向LSTM (biLSTM)网络(而不是学习固定的单词表示),然后根据特定的下游任务微调biLSTM网络,来捕捉上下文感知的单词表示。此外,基于具有自关注机制的高度并行化的转换器架构[22],通过在大规模未标记语料库上使用专门设计的预训练任务预训练双向语言模型,提出了BERT [23]。这些预先训练的上下文感知单词表示作为通用语义特征非常有效,这在很大程度上提高了NLP任务的性能。这项研究激发了大量的后续工作,建立了“预训练和微调”的学习范式。遵循这一范式,大量关于产品生命周期管理的研究得以发展,引入了不同的架构[24,25](如GPT-2 [26]和BART [24])或改进的预培训策略[27–29]。在这种模式下,通常需要微调PLM以适应不同的下游任务。

  • Large language models (LLMs) 大型语言模型

研究人员发现,扩展PLM(例如,扩展模型大小或数据大小)通常会提高下游任务的模型容量(即,遵循扩展定律[30])。许多研究通过训练更大的PLM(例如,175B参数的GPT-3和540 b参数的PaLM)来探索性能极限。虽然缩放主要是在模型尺寸中进行的(具有相似的架构和预训练任务),但这些大尺寸PLM显示出与较小PLM不同的行为(例如,330米参数BERT和1.5Bparameter GPT-2),并在解决一系列复杂任务时显示出令人惊讶的能力(称为应急能力[31])。例如,GPT-3可以通过上下文学习解决少数镜头任务,而GPT-2做得不好。因此,研究团体为这些大型PLM创造了术语“大型语言模型(LLM)”1[32–35]。LLMs的一个显著应用是ChatGPT 2,它将GPT系列的LLMs改编为对话,呈现出与人类惊人的对话能力。

通常,大型语言模型(LLM)是指包含数千亿(或更多)参数(在现有的文献中,对于线性最小模型的最小参数范围没有正式的共识,因为模型容量也与数据大小和总计算量有关。文章对LLM的定义稍显宽松,主要讨论模型大小大于10B的语言模型的transformer语言模型),这些模型是在海量文本数据[32]上训练的,如GPT-3 [55]、PaLM [56]、Galactica [35]和LLaMA [57]。LLM表现出很强的理解自然语言和解决复杂任务的能力(通过文本生成)。

LLM和PLM之间的三个主要区别

首先,LLM表现出一些令人惊讶的突发能力,这些能力在以前的小型PLM中可能没有观察到。这些能力是语言模型在复杂任务中表现的关键,使人工智能算法前所未有地强大和有效。

其次,LLMs将彻底改变人类开发和使用人工智能算法的方式。与小型PLM不同,访问LLM的主要方法是通过提示界面(例如,GPT-4 API)。人类必须理解LLM如何工作,并以LLM可以遵循的方式格式化他们的任务。

第三,LLMs的发展不再明确区分研究和工程。LLMs的培训需要在大规模数据处理和分布并行训练方面的丰富实践经验。为了开发有能力的LLM,研究人员必须解决复杂的工程问题,与工程师一起工作或者成为工程师。

LLMs的基本背景
标度律

考虑到计算预算的增加,KM比例法则倾向于在模型大小上分配比数据大小更大的预算,而Chinchilla比例法则认为两个大小应该以相等的比例增加,即等式(3)中的a和b具有相似的值。

KM标度定律

2020年,Kaplan等人[30](open ai团队)首次提出对与三个主要因素相关的模型性能的幂律关系进行建模,即神经语言模型的模型大小(N)、数据集大小(D)和训练计算量(C)。给定计算预算c,他们根据经验提出了三个基本的比例法则公式6:

这里,Nc、Dc和Cc分别以非嵌入参数的数量、训练令牌tokens的数量和FP-days的数量来度量。根据原始论文[30],Cc和C应该用Cmin c和Cmin表示,对应于计算的最优使用。同时,为了便于讨论,我们使用简化的符号。其中L()表示nats中的交叉熵损失。这三个定律是通过在某些假设(例如,一个因素的分析不应受到其他两个因素的阻碍)下,用不同的数据大小(22M至23B令牌)、模型大小(768M至1.5B非嵌入参数)和训练计算来拟合模型性能而得出的。他们表明模型性能对这三个因素有很强的依赖关系。

Chinchilla scaling law龙猫标度定律

作为另一项具有代表性的研究,Hoffmann等人[34](Google deep mind团队)提出了一种替代形式的比例法则,以指导LLM的计算机优化训练。他们通过改变更大范围的模型尺寸(70M至16B)和数据尺寸(5B至500B tokens令牌)进行了严格的实验,并拟合了类似的比例定律,但具有不同的系数,如下所示[34]:(2)

其中E = 1.69,A = 406.4,B = 410.7,α = 0.34,β = 0.28。通过在约束条件C ≈ 6ND下优化损失L(N,D ),他们证明了计算预算对模型大小和数据大小的最优分配可以如下推导:(3)

其中a = α/ α+β,b = β/ α+β,G是可以通过A、B、α和β计算的比例系数。

涌现能力

LLM的涌现能力。在文献[31]中,LLM的涌现能力被正式定义为“在小模型中不存在但在大模型中出现的能力”,这是LLM区别于以前PLM的最显著特征之一。当涌现能力出现时,它进一步引入了一个显著的特征[31]:当规模达到一定水平时,性能显著高于随机。通过类比,这种涌现模式与物理学中的相变现象密切相关[31,58]。原则上,应急能力可以被定义为与一些复杂的任务相关[31,59],而我们更关心的是可以应用于解决各种任务的一般能力。这里,我们简要介绍LLM的三种典型涌现能力以及拥有这种能力的代表性模型

In-context learning语境学习(ICL)能力

是由GPT-3 [55]正式引入的:假设语言模型已经提供了自然语言指令和/或几个任务演示,它可以通过完成输入文本的单词序列来生成测试实例的预期输出,而不需要额外的训练或梯度更新8。在GPT系列模型中,175B GPT-3模型总体上表现出很强的ICL能力,而GPT-1和GPT-2模型则不然。同时,这种能力也取决于特定的下游任务。例如,ICL能力可以在13B GPT-3的算术任务(例如,3位数的加法和减法)中显现,但是175B GPT-3甚至不能在波斯QA任务中很好地工作[31]。

Instruction following遵循说明

通过对通过自然语言描述格式化的多任务数据集的混合进行微调(称为指令微调instruction tuning),LLM在以指令形式描述的不可见任务上表现良好[28,61,62]。通过指令调整,LLM能够在不使用显式示例的情况下遵循新任务的任务指令,从而具有改进的泛化能力。根据[62]中的实验,当模型大小达到68B时,指令调整的LaMDA-PT [63]在未知任务上开始明显优于未调整的LaMDA-PT,但对于8B或更小的模型大小则不是这样。最近的一项研究[64]发现,PaLM至少需要62B的模型大小才能在四个评估基准(即MMLU、BBH、TyDiQA和MGSM)中很好地执行各种任务,尽管对于某些特定任务(例如MMLU)来说,更小的模型大小可能就足够了。

Step-by-step reasoning逐步推理

对于小型语言模型,通常很难解决涉及多个推理步骤的复杂任务,例如数学应用题。而利用思维链(CoT)提示策略[33],LLMs可以通过利用提示机制来解决此类任务,该机制涉及用于得出最终答案的中间推理步骤。据推测,这种能力可能是通过对代码[33,47]进行训练而获得的。一项实证研究[33]表明,成本激励可以带来性能提高(在算术推理基准上),当应用于模型大小大于60B的PaLM和LaMDA变体时,而当模型大小超过100B时,它相对于标准提示的优势变得更加明显。此外,CoT提示的性能改善似乎也因不同的任务而异,例如,GSM8K > MAWPS > SWAMP for PaLM [33]。

关键技术
Scaling缩放

如前所述,Transformer语言模型中存在明显的缩放效应:更大的模型/数据规模和更多的训练计算通常会提高模型容量[30,34]。作为两个代表性模型,GPT-3和PaLM分别通过将模型大小增加到175B和540B来探索缩放限制。此外,由于计算预算通常有限,因此可以采用比例法则来更高效地分配计算资源。例如,在相同的计算预算下,通过增加数据规模,Chinchilla(具有更多训练令牌)的表现优于其对应模型Gopher(具有更大的模型大小)[34]。同时,应该注意的是,数据缩放应该伴随着仔细的清理过程,因为预训练数据的质量在模型容量中起着关键作用。

Ability eliciting激发能力

在经过大规模语料库的预训练后,LLM被赋予了作为通用任务解决者的潜在能力。然而,当LLM执行一些特定任务时,这些能力可能不会明确表现出来。作为技术方法,设计合适的任务说明或特定的情境学习策略来激发这种能力是有用的。例如,通过包含中间推理步骤,思维链提示已被证明对解决复杂的推理任务是有用的。此外,我们还可以对用自然语言表达的任务描述进行指令调整,以提高LLM对未知任务的泛化能力。然而,这些技术主要对应于LLM的涌现能力,这可能不会在小型语言模型上显示出相同的效果。

Alignment tuning校准调谐

由于LLM被训练来捕捉预训练语料库的数据特征(包括高质量和低质量的数据),它们很可能产生对人类有毒的、有偏见的、甚至有害的内容。有必要使LLMs与人类价值观保持一致,例如,乐于助人、诚实和无害。为此,InstructGPT [61]设计了一种有效的调整方法,使LLM能够遵循预期的指令,该方法利用了带有人类反馈的强化学习技术[61,70]。它通过精心设计的标记策略将人类纳入训练循环。ChatGPT实际上是基于与InstructGPT类似的技术开发的,它在产生高质量、无害的响应(例如,拒绝回答侮辱性问题)方面显示出强大的对齐能力。

Tools manipulation工具操作

本质上,LLM被训练为大规模纯文本语料库上的文本生成器,从而在不能以文本形式最佳表达的任务(例如,数值计算)上表现不佳。此外,他们的能力也仅限于训练前的数据,例如,无法捕捉最新的信息。为了解决这些问题,最近提出的一种技术是采用外部工具来补偿线性调频调幅的不足[71,72]。例如,LLM可以利用计算器进行精确计算[71],并使用搜索引擎检索未知信息[72]。最近,ChatGPT启用了使用外部插件(现有的或新创建的应用程序)9的机制,这类似于LLM的“眼睛和耳朵”。这种机制可以广泛扩大LLM的能力范围。

魔搭平台使用

注册了魔搭平台和阿里云平台账号,有36小时免费GPU环境,运行通义千问-VL-Chat(大规模视觉语言模型(Large Vision Language Model, LVLM))。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。运行结果:

魔搭平台介绍:2022云栖大会杭州现场,阿里达摩院联手CCF开源发展委员会共同推出AI模型社区“魔搭”ModelScope,旨在降低AI的应用门槛。鼓励中文模型的开发和使用,希望实现中文模型的丰富供给,并更好满足本土需求。目前已上架的中文模型超过100个,总量占比超过三分之一,其中包括一批探索人工智能前沿的中文大模型,如阿里通义大模型系列、澜舟科技的孟子系列模型、智谱AI的多语言预训练大模型。

“魔搭”来了!一文深度解读达摩院推出的AI模型社区-阿里云开发者社区 (aliyun)

魔搭平台使用教学链接:

Modelscope(魔搭社区)的使用 - 哔哩哔哩 (bilibili)

使用魔搭开发自己的语音AI:从入门到精通 | 机器之心 (jiqizhixin)

老手:

走出大模型部署新手村!小明这样用魔搭+函数计算-CSDN博客

CodeQwen实现代码生成

https://github/QwenLM/CodeQwen1.5?tab=readme-ov-file

环境配置:

  • python>=3.9
  • transformers>=4.37.0 for Qwen1.5 dense models.

python直接在vscode下载就行

Linux安装Transformers、Pytorch_transformers库离线安装-CSDN博客

transformers用命令:

 pip install --index-url https://pypi.doubanio/simple/ --trusted-host pypi.doubanio transformers

要是报错可以看这一篇完美解决 Could not find a version that satisfies the requirement 安装包名字 (from versions: )-CSDN博客

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
请谨慎使用以root身份运行pip,因为这可能会对系统产生潜在的影响。最好的做法是在虚拟环境中使用Conda的包管理器(即conda install package_name)或普通用户身份的pip来管理包。如果必须以root身份运行pip,请确保您明白潜在的风险并小心操作。

注意这时候就进入下载的目录下了,输入ls显示CodeQwen1.5

cd ..   返回上一级目录

输入python3就会进入python命令行

使用 quit(), exit(), 或者Ctrl-D退出python命令模式。

安装不用那么麻烦,直接

pip install -r requirements.txt

或这打开这个文件,一一pip install xxx

本来报错out of memory(OOM),查了一下显存没爆,网上还有很多解决办法,我按着做结果把我自己容器搞乱了,找不到GPU了,问了赖老师搞好了,重新运行第二遍又不报错了,这已经是第二次这样了,第一遍报错,第二遍就不报错。。。

这是结果:

Linux下Docker安装、与加速

了解docker:Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。资料来源:

什么是 Docker · Docker -- 从入门到实践 (docker-practice.github.io)

基本概念

我们都知道,操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

镜像(Image)和容器Container)的关系,就像是面向对象程序设计中的  和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器名称是指容器的名称标识,可以用来区分不同的容器。Docker deamon会自动生成一个随机字符串UUID作为容器名称,但是为了方便操作,可以手动指定容器名称。容器名称可以在容器内获取,也可以在主机上使用docker ps命令查看

Docker Registry

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库Repository);每个仓库可以包含多个 标签Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,16.0418.04。我们可以通过 ubuntu:16.04,或者 ubuntu:18.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest

仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。

linux系统操作以及级联vscode

挂载的意义在于,保存文件,如果没有挂载,下次登录内容就没了

指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。参考:

Linux的目录挂载详解_挂载目录是什么意思-CSDN博客

安装容器stocker网址报错,求助赖老师帮忙创建了一个账户,然后帮忙创建了一个容器,并级联了vescode使得电脑上可以使用服务器运行py文件(在vscode中ctrl+shift+p级联选择ssh connect,然后输入:

Host 服务器名称
HostName 服务器名称
User root
Port 端口

之后就出来新的vscode界面,左下角会显示ssh)

然后在容器里面运行:python3,发现版本是3.10.12,然后安装一些命令使得方便下载文件(%后面表示的注释):

apt-get install pip
y
apt-get install git
y
%同意下载的意思

ls
%显示文件和子目录
pwd
%查看路径,发现是root,不行
cd /data/bsy/
ls
%之后的开头就会变成root@9d0f4234b547:/data/bsy# 再就是下载github上面的代码
git clone https://github/QwenLM/CodeQwen1.5.git




之后vscode上就有对应文件了。我的文件目录是/data/bsy/

打开新的界面直接点左下角的服务器号码就行。

启动容器的方法

在bsy的ssh界面输入:docker restart 容器名

bsy界面输入docker exec -it bsy /bin/bash以及/etc/init.d/ssh start启动容器界面

FunSAR实现语音识别

按照github上说明文件的流程安装即可,中途可能报错,可能是有的文件没下载,然后不知道怎么的我的这个包下载的目录文件是/root/,差点没找到,可能是输入命令pip clone的时候文件位置错了,然后找不到说明文件示例对应的py文件,就自己创建了一个文件把内容复制进去了,因为其他文件使用模型太大了,要运行好久,所以Speech Recognition (Non-streaming)结果如下:

{model.model_path}/example/ko.mp3:

조 금만 생각 을 하 면서 살 면 훨씬 편할 거야.

ja.mp3:

うち の 中学 は 弁当 制 で 持っ ていけない 場 合は、50 円 の 学校 販売 の パン を 買う。

en.mp3:

The tribal chieftain called for the boy and presented him with 50 pieces of gold.

但是很奇怪。找不到对应文件,不知道怎么加入新的mp3文件,example/目录下并没有上述文件,可以之后试试在哪个目录下添加,看看有没有用。

 智谱CodeGeeX演示环境如何搭建

简单介绍:

清华大学知识工程实验室研发的一款基于大模型的全能的智能编程助手,它可以实现代码的生成与补全、自动添加注释、代码翻译以及智能问答等功能,是有助于提高编程效率的插件。

1、支持哪些编程语言
CodeGeeX 支持 Python、Java、C++、JavaScript、Go 等数十种常见编程语言。

2、支持哪些 IDE
CodeGeeX 支持 VSCode 及 IntelliJ IDEA、PyCharm、GoLand 等 JetBrains IDE。

  1. 对应代码来源:GitHub - THUDM/CodeGeeX: CodeGeeX: An Open Multilingual Code Generation Model (KDD 2023)
  2. 操作参考资料:爆肝 72小时,教你使用CodeGeex AI编程-CSDN博客

小插曲:

解决word中无法粘贴问题(Ctrl+V失灵问题)_word不能ctrl v粘贴-CSDN博客

疑问:

魔搭平台中企业员工跟学生身份的权限有何不同,我直接跳过身份认证了,没选,感觉产品文档里有RAM基本概念_访问控制(RAM)-阿里云帮助中心 (aliyun)目前没找到

本文标签: 算法周记工程师AI