《大规模语言模型从理论到实践》第一轮学习笔记

第一章 绪论

本章主要介绍大规模语言模型基本概念、发展历程和构建流程。

大规模语言模型(Large Language Models,LLM),也称大语言模型 或大型语言模型。

1.1 大规模语言模型基本概念

1.语言模型(Language Model,LM) 目标就是建模自然语言的概率分布。

2.统计语言模型--平滑

尽管n 元语言模型能缓解句子概率为 0 的问题,但语言是由人和时代创造的,具备无尽的可能性,再庞大的训练语料也无法覆盖所有的 n-gram,而训练语料中的零频率并不代表零概率。因此,需要使用平滑技术(Smoothing)来解决这一问题,对所有可能出现的字符串都分配一个非零的概率值,从而避免零概率问题。平滑处理的基本思想是提高低概率,降低高概率, 使整体的概率分布趋于均匀。这类方法通常称为统计语言模型(Statistical Language models,SLM) 。

3.神经语言模型

基于稀疏表示的n 元语言模型仍然有三个较为明显的缺点:(1)无法建模长度超过 n 的上下文;(2)依赖人工 设计规则的平滑技术;(3)当 n 增大时,数据的稀疏性随之增大,模型的参数量更是指数级增加,并且模型受到数据稀疏问题的影响,其参数难以被准确的学习。此外,n 元文法中单词的离散表示也忽略了单词之间的相似性。神经网络方法可以在一定程度上避免数据稀疏问题,有些模型还可以避免对历史长度的限制,从而更好的建模长距离依赖关系。这类方法通常称为神经语言模型(Neural Language Models,NLM)。

4.预训练语言模型(Pre-trained Language Models,PLM)

ImageNet、GPT 和 BERT 为代表的基于 Transformer 模型的大规模预训练语言模型的出现,使得自然语言处理全面进入了预训练微调范式新时代。

5.指令微调语言模型

由于大规模语言模型的参数量巨大,如果在不同任务上都进行微调需要消耗大量的计算资源,因此预训练微调范式不再适用于大规模语言模型。但是研究人员发现,通过语境学习(Incontext Learning,ICL)等方法,直接使用大规模语言模型就可以在很多任务的少样本场景下取得很好的效果。此后,研究人员们提出了面向大规模语言模型的提示词(Prompt)学习方法、模型即服务范式(Model as a Service,MaaS)、指令微调(Instruction Tuning)等方法,在不同任务上都取得了很好的效果。

1.2 大规模语言模型发展历程

1.3 大规模语言模型构建流程

主要包含四个阶段:预训练、有监督微调、奖励建 模、强化学习。这四个阶段都需要不同规模数据集合以及不同类型的算法,会产出不同类型的模 型,同时所需要的资源也有非常大的差别。

预训练(Pretraining)阶段需要利用海量的训练数据,完成深度神经网络参数训练,构建基础语言模型 (Base Model)。基础大模型构建了长文本的建模能力,使得模型具有语言生成能力,根据输入的 提示词(Prompt),模型可以生成文本补全句子。

有监督微调(Supervised Finetuning),也称为指令微调(Instruction Tuning),利用少量高质量数 据集合,包含用户输入的提示词(Prompt)和对应的理想输出结果。用户输入包括问题、闲聊对 话、任务指令等多种形式和任务。得到有监督微调模型(SFT 模型)

奖励建模(Reward Modeling)阶段目标是构建一个文本质量对比模型,对于同一个提示词,SFT模型给出的多个不同输出结果的质量进行排序。如果 RM 模型的目标是针对 所有提示词系统所生成输出都能够高质量的进行判断,该问题所面临的难度在某种程度上与文本 生成等价,因此如何限定 RM 模型应用的泛化边界也是本阶段难点问题。

强化学习(Reinforcement Learning)阶段根据数十万用户给出的提示词,利用在前一阶段训练的 RM 模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。使用强化学习,在 SFT 模型基础上调整参数,使得最 终生成的文本可以获得更高的奖励(Reward)。由于强化学习方法稳定性不高,并且超参数众多,使得模型收敛难度大,再叠加 RM 模型的准确率问题,使得在大规模 语言模型如何能够有效应用强化学习非常困难。

第二章 大语言模型基础

2.1Transformer

细节拉满,全网最详细的Transformer介绍(含大量插图)! - 知乎 (zhihu.com)

1.transformer的输入输出是什么

输入:使用词嵌入算法(embedding algorithm),将每个词转换为一个词向量。那么整个输入的句子是一个向量列表 。

输出:Decoder 最终的输出是一个向量,其中每个元素是浮点数。由 Softmax 层后面的线性层来把这个向量转换为单词。

2.与RNN相比他的优点有哪些

Transformer使用自注意力机制(Self-Attention Mechanism)来建模序列中的依赖关系。在自注意力机制中,每个输入元素都会与序列中的其他元素进行交互,并根据交互结果来调整自身的表示。这种交互是并行的,因为每个元素在计算时都可以同时访问序列中的其他元素,而不需要按照顺序逐步处理。具体来说,自注意力的计算包括查询(Query)、键(Key)和值(Value)的线性变换,以及相似度计算和加权求和。这些步骤都可以通过矩阵运算来实现,而矩阵运算是高度并行化的,因此可以大大提高计算效率。相比之下,RNN则通过迭代地处理序列中的每个元素来建模序列。在RNN中,当前位置的输出和隐藏状态是由当前位置的输入和前一时刻的隐藏状态共同决定的。这意味着RNN在处理序列时必须按照顺序逐步进行,因为每个时刻的输出都依赖于前一个时刻的隐藏状态。这种顺序处理特性使得RNN无法进行有效的并行计算。

此外,Transformer还通过位置编码(Positional Encoding)来保留序列中的顺序信息。位置编码是一个可学习的向量,它会与输入序列的每个元素进行相加,从而在表示中包含位置信息。这种方式使得Transformer能够在并行计算的同时保持对序列顺序的敏感性。

3.self-attention的原理

Query 矩阵负责提出查询需求,Key 矩阵提供匹配的信息线索,而 Value 矩阵则包含了具体的信息内容。

Q矩阵与K矩阵的转置进行点积运算再除以K矩阵向量的维度并进行softmax归一化后得到了attention-score,这些分数决定了在编码当前位置的词时,对所有位置的词分别有多少的注意力。将attention-score与对应的值向量相乘,并将结果相加,以得到最终的输出向量。这个输出向量包含了当前单词在考虑所有其他单词影响后的综合表示。这个输出向量现在可以作为单词在当前上下文中的表示,并用于后续的神经网络层中进行进一步的处理。

4.为什么需要multi-attention

(1)增加模型的学习能力和表达力

通过多个注意力头,模型可以学习到更丰富的上下文信息。每个头可能关注输入的不同特征,这些特征综合起来可以更全面地理解和处理输入序列。

代码

(2)并行化计算提高效率

Multi-head Attention的计算是高度并行化的,因为每个注意力头都可以独立地进行计算,而不需要等待其他头的输出。这种并行化特性使得Multi-head Attention在处理长序列或大规模数据集时具有更高的效率。

5.位置编码的作用和实现

由于 Transfomer 模型不再使用基于循环的方式建模文本输入,序列中不再有任何信息能够提示模型单词之间的相对位置关系。在表示序列中单词顺序和距离。

位置编码的代码:构建一个矩阵存储位置编码,然后加入到单词嵌入向量中。

6.解码器部分的注意力

交叉注意力、掩码注意力

Encoder-Decoder Attention层是使用前一层的输出来构造 Query 矩阵,而 Key 矩阵和 Value 矩阵来自于解码器最终的输出。

7.残差连接和归一化的作用

使得信息流动更加高效,有利于模型的稳定优化。

2.2生成式预训练语言模型 GPT

生成式预训练:生成式预训练的核心想法是学习如何产生数据,此时模型的输入和输出都是数据本身,因此不需要任何的人工标注。然而,在不加约束的情况下,模型有可能学到一些平凡解(如恒等映射),这对于下游的任务显然是没有用的。因此,生成式预训练的目标是学到高维数据在低维空间的一个有效表示(representation)。这个过程通常会约束模型将数据映射到一个低维的特征空间,并会对模型的输入进行一定的扰动,以增加生成任务的难度,防止模型学到平凡解。

自回归模型:根据过去时刻的数据生成未来时刻的数据。这在自然语言处理(NLP)中也被称为语言模型(Language Modeling,LM)任务。给定文本序列x1:T=[x1,x2,...,xT],语言模型的学习目标是最大化序列的出现概率。

自编码模型:目标是学习输入数据的紧凑表示,也称为编码(encoding)。它试图通过编码器和解码器的组合,将输入数据映射到一个低维的潜在空间表示,然后再从这个表示中重建出输入数seq2Seq模型:核心思想是将一个输入序列转换成一个输出序列。它常用于机器翻译、文本摘要和对话系统等需要内容理解和生成的任务。

GPT模型是基于 Transformer 架构构造的仅由解码器组成的网络结构,采用自回归的方式构建语言模型。这主要是因为GPT模型的设计初衷是为了生成文本,而解码层在生成任务中起着关键作用,保证了输入文本每个位置只能依赖过去时刻的信息。

2.2.1 无监督预训练

给定文本序列,GPT首先将其映射为稠密的向量(词向量+位置向量)然后放入Transformer Block中进行编码,GPT模型的输出层基于最后一层的输出,预测每个位置上的条件概率。

 2.2.2 有监督下游任务微调

下游任务在微调过程中,针对任务目标进行优化,很容易使得模型遗忘预训练阶段所学习到 的通用语义知识表示,从而损失模型的通用性和泛化能力,造成灾难性遗忘(Catastrophic Forgetting) 问题。因此,通常会采用混合预训练任务损失和下游微调损失的方法来缓解上述问题。

2.2.3 基于 HuggingFace 的预训练语言模型实践

连不上HuggingFace

Huggingface 超详细介绍 - 知乎 (zhihu.com)

1.数据集加载

2.训练词元分析器(Tokenizer)

3.预处理语料集合

4.模型训练

5.可以用pipline实现不同的任务

2.3 大语言模型结构

2.3.1 LLaMA 的模型结构

LLaMa系列模型详解(原理介绍、代码解读):LLaMa_llama模型-CSDN博客

万字长文详解LlaMA 3的前世今生 - 知乎 (zhihu.com)

采用了前置层归一化(Pre-normalization)并使用 RMSNorm 归一化函数 (Normalizing Function)、激活函数更换为 SwiGLU,并使用了旋转位置嵌入(RoP),整体 Transformer

架构与 GPT-2 类似

1. RMSNorm 归一化函数  

Transformer使用的是layer norm(层归一化)

RMSNorm:通过计算输入向量的均方根(RMS)进行归一化,避免了计算均值和标准差的过程,从而简化了计算。

LayerNorm:需要计算输入向量的均值和标准差,相对RMSNorm来说计算过程更复杂。

2.SwiGLU 激活函数

Swish 激活函数在参数 β 不同取值下的形状,可以看到当 β 趋近于 0 时,Swish 函数趋近于线性函数 y = x,当 β 趋近于无穷大时,Swish 函数趋近于 ReLU 函数,β 取值为 1 时,Swish 函数是光滑且非单调。在 HuggingFace 的 Transformer 库中Swish函数使用 silu 函数代替。

3.旋转位置嵌入(RoPE)

通过绝对位置编码的形式实现相对位置编码,其目标是给q、k添加绝对位置信息。

绝对位置编码:在序列中每个位置上都固定地分配一个唯一的编码。这种编码通常是基于正弦和余弦函数的周期性函数生成的,也可以是可学习的参数。

相对位置编码:根据元素之间的相对位置关系来动态地生成位置信息。这种编码允许模型在处理序列时考虑元素之间的相对距离。

Rotary Position Embedding (RoPE, 旋转式位置编码) | 原理讲解+torch代码实现_旋转位置编码-CSDN博客

复数的矩阵表示 - Invo1 - 博客园 (cnblogs.com)

4.MQA多查询注意力

lama1是Meta在2023年2月发布的大语言模型,是当时性能非常出色的开源模型之一,参数量分别有7B(十亿)、13B、30B和65B四个版本。Llama的各个参数量版本都在超过1T(万亿) token的语料上进行了预训训练,其中,最大的65B参数的模型在2048张80G显存的A100上训练了近21天,甚至在大多数基准测试中都超越了具有175B参数的GPT-3。

在大数据和机器学习的语境下,数据量通常指的是用于训练或测试模型的数据的大小。数据量的单位可以是字节(Byte)、千字节(KB)、兆字节(MB)、吉字节(GB)等。

字节(Byte):是数据存储的基本单位。一个字节由8个比特(bit)组成。
千字节(KB):等于1024个字节。
兆字节(MB):等于1024个千字节,也常用于表示文件或数据的大小。
吉字节(GB):等于1024个兆字节,是较大的数据存储单位。
在大模型中,由于模型参数通常是以浮点数(如float32)存储的,因此可以通过模型参数量来计算模型所需的存储空间大小。例如,如果一个模型有1.1亿个参数,并且每个参数用float32表示(即每个参数占4个字节),那么该模型所需的存储空间大约为44MB(1.1亿×4字节/1024/1024)。

LLama2

MHA改成GQA:整体参数量会有减少
FFN模块矩阵维度有扩充:增强泛化能力,整体参数量增加
上下文长度是llama两倍(长度从2048->4096) 训练语料增加约 40%,体现在1.4T->2.0T的Tokens 

LLama3

2.3.2 注意力机制优化

1. 稀疏注意力机制

 通过限制 Query-Key 对的数量来减少计算复杂度。这类方法就称为稀疏注意力。可以将稀疏化方法进一步分成两类:基于位置信息和基于内容。

 基于内容的稀疏注意力是是根据输入数据来创建稀疏注意力,其中一种很简单的方法是选择 和给定查询(Query)有很高相似度的键(Key)。

2. FlashAttention  

FlashAttention图解(如何加速Attention) - 知乎 (zhihu.com)

Flash Attention原理详解(含代码讲解) - 知乎 (zhihu.com)

计算机原理课程复习:计算机组成原理、计算机网络、数据库、操作系统、数据结构与算法

计算机组成原理:最详细笔记-CSDN博客

【计算机网络】学计算机的正确顺序千万别弄反了,到时候后悔就来不及了_哔哩哔哩_bilibili

3.多查询注意力 (MQA)

在多查询注意力中不同的注意力头共享一个键和值的集合,每个头只单独保留了一份查询参数。因此 键和值的矩阵仅有一份,这大幅度减少了显存占用,使其更高效。

第三章 语言模型训练数据

3.1数据来源

分为通用数据和专业数据

3.2数据处理

词元分析(Tokenization)目标是将原始文本分割成由词元(Token)序列的过程。词元切分也是数据预处理中至关重要的一步。

字节对编码(Byte Pair Encoding,BPE)模型。BPE 尽量将词序列中的词切分成已知的词元。

在遍历词元词表后,对于切分得到的词元序列,为每个词元查询词元表示,构成词元表示序列。若出现未登录词元,即未出现在 BPE 词表中的词元,则采取和未登录词类似的方式,为其赋予相同的表示,最终获得输入的词元表示序列。
字节级( Byte-level BPE 通过将字节视为合并的基本符号,用来改善多语言语料库(例如包含非 ASCII 字符的文本)的分词质量。 GPT-2 BART LLaMA 等大语言模型都采用了这种分词方法。原始 LLaMA 的词表大小是 32K ,并且主要根据英文进行训练,因此,很多汉字都没有直接出现在词表中,需要字节来支持所有的中文字符,由 2 个或者 3 Byte Token 才能拼成一个完整的汉字。
WordPiece,该算法做为BERT 的分词器。WordPiece算法的基本思想与BPE类似,但它在合并字符对时采用了不同的策略。WordPiece算法在每次迭代中,不是简单地选择出现频率最高的字符对进行合并,而是选择能够使得语言模型损失最小的字符对进行合并。这种方法能够生成更加符合语言特性的子词单元。
Unigram 词元分析,从一个足够大的可能词元集合开始,然后迭代地从当前列表中删除词元,直到达到预期的词汇表大小为止。

3.3数据影响分析

数据规模影响

模型参数规模、训练数据量以及总计算量

模型参数规模是指模型中参数的数量,这些参数通常用于表示权重和偏差,决定了模型对输入数据的响应方式。参数规模的大小可以影响模型的性能、计算效率和内存需求。

训练数据量是指用于训练模型的数据集的大小。训练数据的特性和数量是决定一个模型性能好坏的最主要因素。

总计算量通常指的是模型在训练和推理过程中所需的计算资源总量,这包括CPU、GPU等处理器的使用时间以及内存和存储的访问次数等。总计算量的多少取决于多个因素,如模型的复杂度、输入数据的规模以及所使用的硬件设备等。

研究发现,如果模型训练要达到计算最优(Compute-optimal),模型大小和训练词元数量应该等比例缩放,即模型大小加倍则训练词元数量也应该加倍。

数据质量影响、数据多样性影响

3.4开源数据集合

Pile、ROOTS、RefinedWeb、SlimPajama

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 3310. 移除可疑的方法

LeetCode 3310. 移除可疑的方法 你正在维护一个项目,该项目有 n 个方法,编号从 0 到 n - 1。 给你两个整数 n 和 k,以及一个二维整数数组 invocations,其中 invocations[i] [ai, bi] 表示方法 ai 调用了方法 bi。 已知如果方法 k…

Leetcode 37. 解数独

1.题目基本信息 1.1.题目描述 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 33 宫内只能出现一次。(请参考…

文件IO及目录操作

一、文件IO 1.1 close函数&#xff08;关闭文件&#xff09; #include <unistd.h>---所需头文件 int close(int fd); 功能&#xff1a;关闭文件 参数&#xff1a;fd&#xff1a;文件描述符 返回值&#xff1a;成功返回0&#xff0c;失败返回-1&#xff0c;置位错误码 …

主机加固的关键要素:服务器防病毒

在数字化浪潮中&#xff0c;网络安全已成为企业不可忽视的一环。尤其是安全运维人员&#xff0c;他们肩负着保护企业数据不受侵害的重任。MCK主机加固解决方案&#xff0c;正是为了应对这一挑战而生。 网络安全的严峻现实 不久前&#xff0c;一家知名企业因勒索病毒攻击而被迫…

二分查找一>0~n-1中缺失的数字(点名)

1.题目&#xff1a; 2.解析&#xff1a;方法一&#xff1a;用哈希表&#xff1a;记录存在的数字&#xff0c;找到哈希表为空的数字输出 Set<Integer> set new HashSet<>();for(int x : records) set.add(x);for(int i 0; i < set.size(); i){if(!set.contain…

Linux系列-Linux的常见指令

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Linux基本指令 ls指令 语法&#xff1a;ls 【选项】【目录或文件】 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件&#xff0c;对于文件&#xf…

【GO基础学习】环境安装到基础语法(1)

文章目录 环境安装GoLand 安装GO基础GO特点类型和函数Init函数和main函数GO命令下划线变量和常量数组切片Slice 引用 环境安装 下载地址&#xff1a;https://www.golangroadmap.com/ 安装目录文件说明&#xff1a; api&#xff1a;每个版本的 api 变更差异。 bin&#xff1…

基于SpringBoot+Vue的船舶监造系统(带1w+文档)

基于SpringBootVue的船舶监造系统(带1w文档) 基于SpringBootVue的船舶监造系统(带1w文档) 大概在20世纪90年代&#xff0c;我国才开始研发船舶监造系统&#xff0c;与一些发达国家相比&#xff0c;系统研发起步比较晚。当时的计算机技术刚开始发展起来&#xff0c;国家经济力量…

Map的实现类:HashMap

在API获取HsahMap类的全部信息 实例代码&#xff1a;创建一个Student类和Demo02 package com.map;public class Student {private String name;private int stuNo;public Student(String name, int stuNo) {this.name name;this.stuNo stuNo;}public String getName() {retu…

从零开始构建:Python自定义脚本自动化你的日常任务

从零开始构建&#xff1a;Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言&#xff0c;被广泛应用于各种自动化任务中。通过编写 Python 脚本&#xff0c;你可以轻松地将日常重复性工作自动化&#xff0c;例如文件操作、数据处理、网络爬虫、系统…

C++ | Leetcode C++题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution { public:bool circularArrayLoop(vector<int>& nums) {int n nums.size();auto next [&](int cur) {return ((cur nums[cur]) % n n) % n; // 保证返回值在 [0,n) 中};for (int i 0; i < n; i) {if …

STM32 407 RS485通信实现数据收发【我的创作纪念日】

1. 前言 本例中的485驱动&#xff0c;基于标准库编写&#xff0c;不是HAL库&#xff0c;请大家注意。 最近搞嵌入式程序&#xff0c;踩了不少坑&#xff0c;这里统一记录一下。 2. 收获 1.串口通信&#xff0c;数据是一个字节一个字节的发送&#xff0c;对方收到的数据是放在…

github学生认证(Github Copilot)

今天想配置一下Github Copilot&#xff0c;认证学生可以免费使用一年&#xff0c;认证过程中因为各种原因折腾了好久&#xff0c;记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法&#xff0c;不包括配置copilot的全部流程~ 1、准备工作…

无图化加速!MemFusionMap提出时序重叠热图策略,在线建图mAP暴涨5.4%!

导读&#xff1a; HDMap对于自动驾驶系统至关重要&#xff0c;因为它可以为规划提供了精细的道路信息。尽管现有的单帧输入方法在在线矢量化高精地图构建方面取得了不错的成绩&#xff0c;但在处理复杂场景和遮挡时仍然存在挑战。为了解决这些问题&#xff0c;作者提出了 MemFu…

AWR1642+DCA1000采集ADC数据并解析

文章同步发布在CSDN和公众号(雷达原理与系统),后续文章中出现的资料,参考文档等都会放在GitHub仓库,欢迎fork和star。 0. 序言 为什么要先将采集ADC数据呢?因为ADC数据是信号处理的输入,是后续理解信号处理手段的基础。当然这里也可以采用仿真信号,但我的想法是单独出…

SQL第13课——创建高级联结

本课讲另外一些联结&#xff08;含义和使用方法&#xff09;&#xff0c;如何使用表别名&#xff0c;如何对被联结的表使用聚集函数。 13.1 使用表别名 第7课中使用别名引用被检索的表列&#xff0c;给列起别名的语法如下&#xff1a; SQL除了可以对列名和计算字段使用别名&a…

聚类分析 | IPOA优化FCM模糊C均值聚类优化算法

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 (多图聚类)IPOA优化FCM模糊C均值聚类优化算法&#xff0c;matlab代码&#xff0c;超多图 基于改进的鹈鹕优化算法&#xff08;IPOA&#xff09;优化FCM模糊C均值聚类优化&#xff0c;matlab代码&#xff0c;直接运行…

HTB:Preignition[WriteUP]

连接至HTB服务器并启动靶机 靶机IP&#xff1a;10.129.157.49 分配IP&#xff1a;10.10.16.12 1.Directory Brute-forcing is a technique used to check a lot of paths on a web server to find hidden pages. Which is another name for this? (i) Local File Inclusion, (…

窗口售票系统1.0版本

本窗口售票系统实现了三个售票窗口的随机售票&#xff0c;实现随机到某一个窗口买票&#xff0c;总票余量都会减少&#xff0c;即三个窗口共享同一个票余量。若票余量小于一次性购票量&#xff0c;则提示报错&#xff1b;若车票售罄&#xff0c;则代码结束运行。 代码实现&…

用户和组管理

用户管理 用户管理包括创建用户、修改用户属性、删除用户等操作。 创建用户 使用 useradd 命令可以创建新用户。 格式&#xff1a;useradd [选项] username 步骤1&#xff1a;创建新用户 useradd tom 步骤 2: 设置用户密码 新用户创建后&#xff0c;需要设置一个密码才能…