小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述

Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。

Ansible的主要特点包括:

1、简单易用:设计简单,语法清晰,无需特殊培训即可上手使用。

2、基于模块化的架构:使用各种内置和第三方的插件和模块,可以轻松地扩展功能。

3、配置管理:可以管理各种操作系统、网络设备和云平台等的配置。

4、任务自动化:可以自动执行各种任务,如软件安装、服务启停等。

5、基于剧本(Playbook)的自动化:可以编写剧本来定义一系列任务和配置,实现复杂的自动化流程。

6、可扩展性:可以与其他工具和平台集成,如监控系统、版本控制工具等。

二、工作原理

Ansible的工作原理基于以下几个核心概念:

1、控制节点(Control Node):控制节点是指安装了Ansible的机器,可以是任何一台可以访问到被管理节点的计算机。在控制节点上,管理员可以编写Ansible的配置文件和剧本,然后使用Ansible命令行工具来执行这些任务。

2、主机清单(Inventory):主机清单是一个文本文件,用于定义被管理节点的主机列表和相关的配置信息。其中可以包含主机名、IP地址、SSH连接信息等。管理员可以根据需要在主机清单中组织和分类主机。

3、模块(Modules):模块是Ansible的核心组成部分,用于执行特定的任务。Ansible自带了众多内置模块,如文件操作、软件包管理、服务管理等。管理员可以通过在剧本中使用模块来指定需要执行的任务,并传递参数。

4、剧本(Playbook):剧本是一个定义了一系列任务和配置的YAML格式文件。通过剧本,管理员可以描述需要在被管理节点上执行的操作。剧本由一个或多个Play组成,每个Play包含了一组任务和要操作的主机列表。

5、执行流程:管理员在控制节点上编写好剧本,然后使用Ansible命令行工具执行剧本。当执行命令时,Ansible会首先与被管理节点建立SSH连接,然后将剧本分发到被管理节点上,并在每个节点上按照剧本定义的任务进行执行。执行完成后,Ansible会将执行结果返回到控制节点。

三、ansible的应用

Ansible没有客户端,也不需要在被管理主机添加任何代理程序,通过SSH完成底层通信,而SSH在Linux的发型版本中默认已经安装并启用,而在Windows系统下则依赖于PowerShell,Ansible要求管理端必须是Linux系统,在管理节点通过应用模块将指令发送到被管理主机上,并在执行完毕后自动删除产生的临时文件,根据Ansible使用过程中不同角色,可将其分为三个部分。

1、使用者如何使用Ansible实现自动化运维?

2、Ansible的工具集,Ansible可以实现的功能?

3、作用对象,Ansible可以影响哪些主机?

四、ansible的使用者

1、CMDB:CMDB系统存储和管理着企业IT架构中的各种配置信息,是构建ITL项目核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具完成操作者所希望达到的目标。

2、PUBLIC/PRIVATE方式,Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP,Pythone,PERL等多种流行语言,基于PUBLIC/PRIVATE,Ansible以API调用的方式运行。

3、Ad-Hoc命令集,Users直接通过Ad-Hoc命令集调用Ansible工具来完成工作。

4、Playbooks:Users预先编写好Ansible Playbooks,通过执行Playbooks中预先编排好的任务集按序执行命令。

五、ansible的工具集合

Ansible工具集合了inventory,Moudles,Plugins和API。其中,inventory用来管理设备列表,可以通过分组(不同的业务)实现,对组的调用直接影响组内所有的主机;Moudles是各种执行模块,几乎所有的管理任务都是通过模块来执行的;Plugins提供了各种附加功能;API为编程人员提供了一个调用接口,可以做Ansible的二次开发具体表现如下:

1、Ansible Playbook:任务脚本,编排定义Ansible任务集的配置文件,由Ansible按序依次执行,通常是JSON格式的YML/YAML文件;

2、inventory:Ansible管理主机清单

3、Moudle:Ansible执行命令功能模块,多数为内置的核心模块也可以用户自定义;

4、Plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等,该功能不常用。

5、API:提供第三方程序调用的应用程序编程接口;

六、作用对象

Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类PUBLIC/PRIVATE,商业和非商业设备的网络设施。

使用者使用Ansible或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或playbooks后,Ansible会遵循预先定义安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模板和插件,根据inventory中自定义的主机列表通过SSH将任务集以临时文件或命令的形式传输给远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。

七、准备工作

1、准备三台或多台服务器

2、三台主机关闭防火墙

3、三台主机互相通联

4、三台主机互相配置ssh免密登录

八、安装部署

三台主机都按照ansible
yum -y install ansible 

修改主机的配置文件

vim /etc/ansible/hosts
到最后一行插入
[syh]               组名
192.168.77.111      成员ip
192.168.77.115      成员ip

ok这样ansible就配置完成了

九、ansible的使用

ansible命令格式:ansible  要执行命令的组  -m  要使用的模块  -[选项]   指定模块参数

在ansible中有3000多个模块,ansible通过模块来控制组中的成员执行命令,修改文件内容,安装软件等这里只写几个常用的模块

配置完成后测试
ansible -i /etc/ansible/hosts  syh -m  ping
这里-i选项表示inventory 默认为/etc/ansible/hosts
-m表示指定模块
ping是一个模块用来测试

 1、command模块

command模块在远程主机执行命令,但是不支持管道,重定向等shell的特征,常用参数如下(不支持管道,不建议使用)。

  1. chdir:在远程主机上运行命令前要提前进入的目录

  2. creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务

  3. removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务

  4. executable:指明运行命令的shell程序

远程查看组中成员家目录的内容
ansible syh -m command -a "chdir=/root ls -l"

查看组成员的的时间和平均负载
ansible syh -m command -a "uptime"

 2、shell模块

shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令,和command模块的区别是它支持shell特征,如管道,重定向等。

重定向
ansible syh -m shell -a "echo 111 > 1.txt"

测试管道符
ansible syh -m shell -a 'ifconfig ens33 | awk 'NR==2' "

 3.raw模块

最原始的方式运行命令(不依赖python,仅通过ssh实现)

清除yum缓存
ansible syh -m raw -a "yum clean all"

4、copy模块

copy模块用于复制指定主机文件到远程主机的指定位置,常见参数如下

  1. dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有内容。

  2. src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录

  3. mode:指出复制时,目标文件的权限 可选

  4. owner:指出复制时,目标文件的属主 可选

  5. group:指出复制时,目标文件的属组 可选

  6. content:指出复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据到目标文件中

特别提示:

参数:backup=yes===>意思是,如果目标路径下,有与我同名但不同内容的文件时,在覆盖前,对目标文件先进行备份。

所有被管理端节点必须安装libselinux-python包

将syh组中主机的/etc/hosts文件拷贝到/tmp下 指定权限为777 更改属主为syh更改属组为root
ansible syh -m copy -a "src=/etc/hosts dest=/tmp mode=777 owner=Rich group=root"

查看

 5、yum模块

Yum模块基于yum机制,对远程主机管理程序包,常用参数如下。

  1. name:程序包的名称,可以带上版本号,如不指定版本号默认安装为最新版本

  2. state=present | latest | absent:指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包

  3. disablerepo:在用yum安装时禁用某个仓库的ID

  4. enablerepo:在用yum安装时启用某个参考的ID

  5. conf_file:yum运行时的配置文件而不是使用默认的配置文件

  6. diable_gpg_check=yes | no:是否启用完整性校验功能

在组成员中安装dns服务
ansible syh -m yum -a "name=bind state=present"

查看

7.service模块 

Service模块为用来管理远程主机上的服务的模块,常见参数如下:

  1. name:被管理的服务名称

  2. state=started | stopped | restarted:动作包含启动关机或重启

  3. enabled=yes | no:表示是否设置该服务开机自启动

  4. runlevel:如果设定了enabled开机自启动,则要定义在哪些运行目标下自启动

启动组成员中http服务,并设置为开机自启
ansible syh -m service -a "name=httpd state=started enabled=yes"

 查看

 8、user模块

User模块用于管理远程主机上的用户账户,常见参数如下:

  1. name:必选参数  账号名称

  2. state=present | absent:创建账号或者删除账号,present表示创建,absent表示删除

  3. system=yes | no:是否为系统账号

  4. uid:用户UID

  5. group:用户的基本组

  6. groups:用户的附加组

  7. shell:默认使用的shell

  8. home:用户的家目录

  9. move_home=yes | no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动

  10. password:用户的密码,建议使用加密后的字符串

  11. comment:用户的注释信息

  12. remove=yes | no:当state=absent时,是否删除用户的家目录

创建一个程序用户
ansible syh -m user -a 'name=user1 system=yes uid=502 group=root groups=sshd shell=/sbin/nologin home=/home/user1 password=user1 comment="test user"' 

 9、script模块

script模块能够实现远程服务器批量运行本地的shell脚本

vim /opt/file.sh                  在opt目录下创建一个创建20个测试文件的脚本
#!/bin/bashtouch /tmp/file{1..20}.txt

 

查看

 十、playkook(剧本)的使用

playbook格式:ansible-playbook -[选项] 编写的yml文件路径

Playbook配置文件使用YAML语法,具有简洁明了,结构清晰等特点。Playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表,前面介绍的ansible命令虽然可以完成各种任务,但是当配置一系列任务时,逐条输入命令就显得效率非常低下,更有效的方式在playbook配置中配置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维,YAML文件的扩展名通常为.yaml或.yml

YAML语法和其他高级语言类似,其结构通过缩进来展示,通过“-“来表达选项,通过冒号“:”来分隔键和值。整个文件以“---”开始并以“”结束

1、playbook选项

--syntax-check:检测yaml文件的语法

-C(--check):测试,不会改变主机的任何配置

--list-hosts:列出yaml文件影响的主机列表

--list-tasks:列出yaml文件的任务列表

--list-tags:列出yaml文件中的标签

-t TAGS(--tags=TAGS):表示只执行指定标签的任务

--skip-tags=SKIP_TAGSS:表示除了指定标签任务,执行其他任务

--start-at-task=START_AT:从指定任务开始往下运行

2、修改配置文件(方便测试)

vim /etc/ansible/hosts
[test1]
192.168.77.112[test2]
192.168.77.115

 3、编写playbook

所有的“-”和“:”后面均有空格,而且要注意缩进和对齐

Playbook的核心元素包含:

  1. hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息

  2. remote_user:远程主机上,运行此任务的默认为root运行

  3. tasks:任务,即定义的具体任务,由模块定义的操作列表

  4. handlers:触发器,类似tasks,只是在特定的条件下才会触发任务。某任务的状态在运行后changed时,可通过“notify”通知给相应的handlers进行触发执行。

  5. roles:角色,将hosts剥离出去,由tasks,handlers等所组成的一种特定的结构集合。

vim /etc/ansible/test1.yml---										#开头格式(可忽略)
- hosts: test1							#表示对test01(192.168.77.112)的操作remote_user: root						#远端执行用户身份roottasks:								#任务列表- name: adduser						#任务名称user: name=user2 state=present	#执行user模块创建用户tags:								#创建tag标签- testa							#tag标签为testa- name: addgroup					#任务名称group: name=tests system=yes		#执行group模块创建一个组账号tags:								#创建tag标签- testb							#tag标签为testb
- hosts: test2							#表示对test02(192.168.77.115)的操作remote_user: root						#远端执行用户身份roottasks:								#任务列表- name: cf							#任务名称copy: src=/etc/passwd dest=/home	#执行copy模块复制文件tags:								#创建tag标签- testc							#tag标签为testsc
...										#结尾格式(可忽略)

测试palybook
ansible-playbook -C /etc/ansible/test.yml

没有报错就可以执行了(有些特殊情况就算没有报错也会执行失败)

 执行

十一、触发器

需要触发才能执行的任务,当之前定义在tasks中的任务执行完成后,若希望在基础上触发其他的任务,这时就需要定义handlers。例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效,handlers触发器具有以下优点。

  1. handlers是Ansible提供的条件机制之一,handlers和task很类似,但是他在被task通知的时候才会触发执行

  2. handlers只会在所有任务执行完成后执行,而且即使被通知了多次,它也只会执行一次,handlers按照定义的顺序依次执行

---											    //固定开头格式
- hosts: test1									//指定运行主机为test01组remote_user: root						        //指定对端运行用户的身份tasks: 									    //任务列表- name: change port				        //定义任务名称command: sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf//模块为command:使用sed命令替换监听端口为8080notify: 				                //完成任务后调用restart httpd server触发器- restart httpd server		handlers: 			                        //配置触发器- name: restart httpd server				    //指定触发器名字service: name=httpd state=restarted			//指定触发条件为重启httpd服务

测试playbook (没有报错)

 执行playbook(成功)

十二、变量

vim /etc/ansible/test_vars.yml   编写自定义变量
---
- hosts: allvars:                           #定义变量- names: "cloud"                #第一个name变量age: "3"                       #第二个age变量tasks:- name: "{{ names }}"           #{{}}两对大括号引用变量,变量名两头空格shell: echo "myname {{ names }},myage {{ age }}"register: var_result- debug: var=var_result
...

 

图中红色的就是刚才定义的变量

 

十三、playbook中的角色

将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色,角色一般存放在/etc/ansible/roles/目录中,可通过ansible的配置文件来调整默认的角色目录。/etc/ansible/roles目录下有很多的子目录,其中每一个子目录对应一个角色。每个角色也有自己的目录结构。

/etc/ansible/roles/为角色集合,该目录下有自定义的各个子目录

  1. mariadb:mysql角色

  2. apache:httpd角色

  3. nginx:nginx角色

每个角色的定义,以特定的层级目录结构进行组织,以Mariadb(mysql角色) 为例

  1. files:存放copy或script等模块调用的文件

  2. templates:存放template模块查找所需要的模板文件的目录,如mysql配置文件等模板

  3. tasks:任务存放目录

  4. handlers:存放相关触发执行器的目录

  5. vars:变量存放的目录

  6. meta:用于存放此角色元数据

  7. default:默认变量存放目录,文件中定义了此角色使用的默认变量

上述目录中tasks,handlers,vars,meta,default至少应该包含一个main.yml,该目录下也可以有其他的yml文件,但是需要在main.yml文件中用include指定将其他.yml文件包含进来。

十三、用ansible-playbook给成员安装mariadb

创建数据库角色
mkdir -pv /etc/ansible/roles/mariadb/{files,tasks,handlers}

vim /etc/ansible/mariadb.yml                    创建mariadb角色
---
- hosts: test1:test2                            需要执行的主机remote_user: root                             执行的用户roles:                                        - mariadb                                   角色
...

cd /etc/ansible/roles/mariadb/tasks     进入任务存放目录
vim main.yml                            编写任务
---			                                    //固定开头格式
- name: install mariadb			                //指定任务名称安装mariadb数据库yum: name=mariadb-server state=present		//执行yum模块安装mariadb
- name: move config file		                //指定任务名称移除原有配置文件shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"  //判断有就移除
- name: provide a new config file				//创建一个新的配置文件copy: src=my.cnf dest=/etc/my.cnf		        //src源会自动到files文件去找my.cnf文件
- name: reload mariadb					        //指定任务名称为重启mariadbshell: systemctl restart mariadb              //shell模块重启
- name: create database testdb		            //按要求添加执行如下sql语句shell: mysql -u root -e "create database testdb;grant all privileges on testdb.* to test@192.168.77.% identified by 'test123';flush privileges;"notify:				                        //配置触发器- restart mariadb		                        //为重启mariadb
...

cd ../handlers/                             进入触发器文件
vim main.yml                                编写触发器
---
- name: restart mariadb				        //引用上面配置的触发器service: name=mariadb state=restarted     //触发后重启mariadb
...

 

cd ../files/
cp /etc/my.cnf /etc/ansible/roles/mariadb/files/
ls
my.cnf				//准备my.cnf文件
cd /etc/ansible/
tree	

 

测试(成功)

 执行成功

 

以上就是ansible的基本使用

如有错误欢迎各位大佬批评指正,我们共同进步

 

 

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

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

相关文章

LCD—STM32液晶显示(1.显示器简介及LCD显示原理)(6000字详细介绍)

目录 显示器简介 液晶显示器 液晶 像素 液晶屏缺点 LED显示器 OLED显示器 显示器的基本参数 STM32板载液晶控制原理(不带微控制器) 液晶控制原理 控制信号线(不带液晶控制器) 液晶数据传输时序 显存 总结 3.2寸液晶屏介绍(搭载…

基于单片机的智能鞋柜的设计与实现

功能介绍 以51单片机作为主控系统;通过DHT11温湿度采集;通过按键设置逻辑处理;通过LED紫外线消毒;通过继电器控制风扇进行换气除湿;通过继电器控制加热片进行加热;整个电路以5v供电; 电路图 PCB 源代码 #i…

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android

cocosCreator3.6以上接入Bugly上报其实很简单,不需要网上那么多弯弯绕,三须三步走。 1. 按照官网方式接入android的bugly 2. android端写一个Bugly上报管理类 3. 修改你工程目录下native\engine\common\Classes\目录下的Game.h, Game.cpp两个文件&…

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解 1.GPT 模型 1.1 GPT 模型简介 在自然语言处理问题中,可从互联网上下载大量无标注数据,而针对具体问题的有标注数据却非常少&#x…

【JavaEE】Tomcat的安装和使用、创建Mevan项目使用Servlet写一个程序

目录 前言 一、Tomcat的下载和安装 二、写一个简单的Servlet项目 1、创建一个Maven项目 2、引入依赖 3、创建目录 4、编写Servlet代码。 5、打包程序 6、将程序部署到Tomcat上 7、验证程序运行结果 三、在IDEA上安装Smart Tomcat插件 四、Servlet中的一些常见错误 …

基于timegan扩增技术,进行多维度数据扩增(Python编程,数据集为瓦斯浓度气体数据集)

1.数据集介绍 瓦斯是被预测气体,其它列为特征列,原始数据一共有472行数据,因为原始数据比较少,所以要对原始数据(总共8列数据)进行扩增。 开始数据截图 截止数据截图 2. 文件夹介绍 lstm.py是对未扩增的数据进行训练…

ChatGLM-6B+LangChain实战

目标:原始使用ChatGLM-6B可接受的文字长度有限,打算结合LangChain实现长文本生成摘要. 方法: step1:自定义一个GLM继承LangChain中的langchain.llms.base.LLM,load自己的模型. step2:使用LangChain的mapred…

electron globalShortcut 快捷键与系统全局快捷键冲突

用 electron 开发自己的接口测试工具(Post Tools),在设置了 globalShortcut 快捷键后,发现应用中的快捷键与系统全局快捷键冲突了,导致系统快捷键不可正常使用。 快捷键配置 export function initGlobalShortcut(main…

MySQL数据库(一)

目录 一、MySQL安装与配置 1.1什么是数据库 1.2数据库的分类 二、MySQL服务器安装 2.1Windows绿色安装 2.2配置环境 一、MySQL安装与配置 1.1什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问…

typescript manual

这里写目录标题 throw new Error在浏览器中调试Json定义类型定义数组 functionNamed functionanonymous function Axios经典片段 错误及解决ref valuebecause it is a constantAPI 和 客户端定义的数据结构不一样ServerClient throw new Error throw new Error(“Get data err…

leetcode 1218. Longest Arithmetic Subsequence of Given Difference(给定差值的最长算术子序列)

给数组arr和一个差值difference, 不打乱arr中数字的顺序,抽取最长的子序列,使序列中每相邻两个元素的差值为difference. 求满足条件的最长子序列的长度。 思路: DP 因为差值difference是固定的,每抽取一个元素,它前…

【lesson2】Linux基本指令1

文章目录 touch创建文件更新文件最新修改时间 lslsls -lls -als -i pwd...cdcd 路径法一:cd 绝对路径法二:cd 相对路径 cd - stattreemkdirmkdir创建一个目录mkdir -p创建一串路径目录 ~/rmdirrmrmrm -frm -rrm -i mancpcpcp -r mvnaocatcatcat -n ta…

信息泄露与大数据:隐私安全的挑战与对策

随着大数据时代的到来,我们生活的方方面面都与数据息息相关。然而,随之而来的信息泄露问题也日益严重,给个人隐私和数据安全带来了巨大挑战。本文将围绕信息泄露与大数据展开讨论,探讨其中的问题、原因以及如何应对。 山海鲸大屏 …

16 | 视图:如何实现服务和数据在微服务各层的协作?

目录 服务的协作 1. 服务的类型 2. 服务的调用 微服务内跨层 微服务之间的服务调用 领域事件驱动 3. 服务的封装与组合 基础层 领域层 应用层 用户接口层 4. 两种分层架构的服务依赖关系 松散分层架构的服务依赖 严格分层架构的服务依赖 数据对象视图 基础层 领…

【Linux】分布式存储系统 Ceph

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 分布式存储系统 Ceph Ceph 概述1、Ceph 简介2、存储基础3、Ceph 优势4、Ceph 架构4、Ceph 核心组件5、OSD 存储后端6、Ceph 数据的存储过程7、Ceph 版本发行生命周期 Ceph 集…

向量检索增强chatglm生成

背景: 基于chatglm构建agnet:chatglm实现Agent控制 - 知乎 前面一篇文章已经介绍了如何去搭建LLM Agent控制系统,也简单介绍了如何去构建Toolset和构建Action。但是在上篇文章中Toolset其实是基于搜索api构建的,从这篇文章开始后…

svn迁移到git实际操作

1.到svn项目目录右键选中gitbash打开窗口&#xff0c;执行获取用户并映射成git样式账号命令如下: svn log -q | awk -F | /^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" "$2" <"$2"163.cn>…

【原创】实现ChatGPT中Transformer模型之Encoder-Decoder

作者&#xff1a;黑夜路人 时间&#xff1a;2023年7月 Transformer Block &#xff08;通用块&#xff09;实现 看以上整个链路图&#xff0c;其实我们可以很清晰看到这心其实在Encoder环节里面主要是有几个大环节&#xff0c;每一层主要的核心作用如下&#xff1a; Multi-he…

中小企业部署MES管理系统需要考虑哪些问题

随着制造业的快速发展&#xff0c;越来越多的中小企业开始意识到数字化管理的重要性。为了提高生产效率、降低成本、提升品质及满足客户需求&#xff0c;部署MES生产管理系统成为了中小企业实现数字化转型的关键一步。然而&#xff0c;在部署MES管理系统时&#xff0c;中小企业…

[QT编程系列-11]:C++图形用户界面编程,QT框架快速入门培训 - 5- QT主要控件与自定义控件

目录 5. QT主要控件 5.1 预定义控件 5.2 自定义控件 5.3 用预定义容器橙子和提升自定义控件 5.3 后记 5. QT主要控件 5.1 预定义控件 在Qt中&#xff0c;有许多预定义的控件&#xff08;Widgets&#xff09;可用于创建用户界面。这些控件提供了各种常见的用户界面元素&am…