关于 Kubernetes中Admission Controllers(准入控制器) 认知的一些笔记

写在前面


  • 工作中遇到,简单整理记忆
  • 博文为官方文档整理
  • 涉及内置准入控制的分类理解
  • 理解不足小伙伴帮忙指正

人活着就是为了忍受摧残,一直到死,想明了这一点,一切事情都能泰然处之 —— 王小波《黄金时代》


为什么需要准入控制器

准入控制器 可以简单理解为 埋点。或者 web 中的 拦截器,编程中的,AOP 切面,顾名思义, 准入控制器用于在 k8s 中资源创建的时候做一些校验机制,判断创建的 API 资源是否可行。同时也可以对传递到准入控制器的 操作对象资源请求进行更改,在加工,或者完全拒绝。

通过 准入控制器,可以灵活的处理对API 资源的准入进行限制,除了提供的内置准入控制器,K8s 还提供了 webhook 的方式,即可以通过编码的方式编写自己的的埋点逻辑。

准入控制器

准入控制器可以执行验证(Validating) 或变更(Mutating) 操作。 变更(mutating)控制器可以根据被其接受的请求更改相关对象;验证(validating)控制器则不行。

准入控制器限制创建、删除、修改对象的请求。 准入控制器也可以阻止自定义动作,例如通过 API 服务器代理连接到 Pod 的请求。 准入控制器不会 (也不能)阻止读取(get、watch 或 list)对象的请求。

通俗的讲,准入控制器是一段代码,用于拦截对 Kubernetes API 服务器在对象持久化之前,但在请求之后 已通过身份验证和授权。具体的拦截阶段可以在下面的图片看到,准入控制过程分为两个阶段。第一阶段,运行变更准入控制器。第二阶段,运行验证准入控制器,某些控制器既是变更准入控制器又是验证准入控制器。

https://kubernetes.io/images/blog/2019-03-21-a-guide-to-kubernetes-admission-controllers/admission-controller-phases.png

如果两个阶段之一的任何一个控制器拒绝了某请求,则整个请求将立即被拒绝,并向最终用户返回错误

如何启用一个准入控制器?

Kubernetes API 服务器的 enable-admission-plugins 标志接受一个(以逗号分隔的)准入控制插件列表, 这些插件会在集群修改对象之前被调用。

┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$cat  kube-apiserver.yaml | grep enable-admission
    - --enable-admission-plugins=NodeRestriction
┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$

怎么关闭准入控制器?

Kubernetes API 服务器的 disable-admission-plugins 标志,会将传入的(以逗号分隔的) 准入控制插件列表禁用,即使是默认启用的插件也会被禁用。

┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$cat  kube-apiserver.yaml | grep desable-admission
┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$
┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$kubectl exec -it  kube-apiserver-vms100.liruilongs.github.io  -n kube-system  -- kube-apiserver --version
Kubernetes v1.25.1
┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$

哪些插件是默认启用的?

┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$kubectl exec -it  kube-apiserver-vms100.liruilongs.github.io  -n kube-system  -- kube-apiserver -h | grep enable-admission-plugins
      --admission-control strings              Admission is divided into two phases. In the first phase, only mutating admission plugins run. In the second phase, only validating admission plugins run. The names in the below list may represent a validating plugin, a mutating plugin, or both. The order of plugins in which they are passed to this flag does not matter. Comma-delimited list of: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, DenyServiceExternalIPs, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodSecurity, PodTolerationRestriction, Priority, ResourceQuota, RuntimeClass, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook. (DEPRECATED: Use --enable-admission-plugins or --disable-admission-plugins instead. Will be removed in a future version.)
      --enable-admission-plugins strings       admission plugins that should be enabled in addition to default enabled ones (NamespaceLifecycle, LimitRanger, ServiceAccount, TaintNodesByCondition, PodSecurity, Priority, DefaultTolerationSeconds, DefaultStorageClass, StorageObjectInUseProtection, PersistentVolumeClaimResize, RuntimeClass, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota). Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, DenyServiceExternalIPs, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodSecurity, PodTolerationRestriction, Priority, ResourceQuota, RuntimeClass, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter.
┌──[root@vms100.liruilongs.github.io]-[/etc/kubernetes/manifests]
└─$

上面的--admission-control 为废弃的 配置方式,下面的为当前的配置方式,

(DEPRECATED: Use --enable-admission-plugins or --disable-admission-plugins instead. Will be removed in a future version.)

默认启动的准入控制器

NamespaceLifecycle, LimitRanger, ServiceAccount, TaintNodesByCondition, PodSecurity, Priority, DefaultTolerationSeconds, DefaultStorageClass, StorageObjectInUseProtection, PersistentVolumeClaimResize, RuntimeClass, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota

所以的准入控制器列表:

Comma-delimited list of admission plugins: AlwaysAdmit, AlwaysDeny, AlwaysPullImages, CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, DenyServiceExternalIPs, EventRateLimit, ExtendedResourceToleration, ImagePolicyWebhook, LimitPodHardAntiAffinityTopology, LimitRanger, MutatingAdmissionWebhook, NamespaceAutoProvision, NamespaceExists, NamespaceLifecycle, NodeRestriction, OwnerReferencesPermissionEnforcement, PersistentVolumeClaimResize, PersistentVolumeLabel, PodNodeSelector, PodSecurity, PodTolerationRestriction, Priority, ResourceQuota, RuntimeClass, SecurityContextDeny, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook. The order of plugins in this flag does not matter

每个准入控制器的作用是什么?

这里我们只看默认启用的准入控制器,方便理解记忆,整体分为 三类:

  • 用于验证
  • 用于变更修改
  • 同时具有验证和变更修改

验证

ResourceQuota

此准入控制器会监测传入的请求,并确保它不违反任何一个 Namespace 中的 ResourceQuota 对象中列举的约束。如果你在 Kubernetes 部署中使用了 ResourceQuota, 则必须使用这个准入控制器来强制执行配额限制

ResourceQuota 在 K8s 中是一个用于配置命名空间级别资源限制的API 对象

NamespaceLifecycle:

该准入控制器禁止在一个正在被终止的 Namespace 中创建新对象,并确保针对不存在的 Namespace 的请求被拒绝。该准入控制器还会禁止删除三个系统保留的名字空间,即 default、 kube-system 和 kube-public。

Namespace 的删除操作会触发一系列删除该名字空间中所有对象(Pod、Service 等)的操作。 为了确保这个过程的完整性,我们强烈建议启用这个准入控制器

PodSecurity

PodSecurity 准入控制器在新 Pod 被准入之前对其进行检查, 根据请求的安全上下文和 Pod 所在名字空间允许的 Pod 安全性标准的限制来确定新 Pod 是否应该被准入。

PodSecurity 取代了一个名为 PodSecurityPolicy 的旧准入控制器。PodSecurity 的触发的前提是配置了安全上下文,在新旧版本中,安全管理略有不同,1.25 后的到达稳定版本,可以通过在创建命名空间的时候添加不同的安全标签实现不同的安全标准,只有配置了准入控制标签才会触发安全准入控制。

PersistentVolumeClaimResize

此准入控制器检查传入的 PersistentVolumeClaim 调整大小请求,对其执行额外的验证检查操作。

建议启用 PersistentVolumeClaimResize 准入控制器。除非 PVC 的 StorageClass 明确地将 allowVolumeExpansion 设置为 true显式启用调整大小。 否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整

CertificateApproval

此准入控制器获取审批 CertificateSigningRequest 资源的请求并执行额外的鉴权检查, 以确保针对设置了 spec.signerNameCertificateSigningRequest 资源而言, 审批请求的用户有权限对证书请求执行 审批 操作。

对于 CSR 来讲,低版本的不需要 signerName, 高版本是一个强制参数,必须要设置。

CertificateSigning

此准入控制器监视对 CertificateSigningRequest 资源的 status.certificate 字段的更新请求, 并执行额外的鉴权检查,以确保针对设置了 spec.signerNameCertificateSigningRequest 资源而言, 签发证书的用户有权限对证书请求执行 签发 操作。

CertificateSubjectRestriction

此准入控制器监视 spec.signerName 被设置为 kubernetes.io/kube-apiserver-clientCertificateSigningRequest 资源创建请求,并拒绝所有将 group(或 organization attribute) 设置为 system:masters 的请求

ValidatingAdmissionWebhook

此准入控制器调用与请求匹配的所有验证性 Webhook。 匹配的 Webhook 将被并行调用。如果其中任何一个拒绝请求,则整个请求将失败。 该准入控制器仅在验证(Validating)阶段运行;与 MutatingAdmissionWebhook 准入控制器所调用的 Webhook 相反,它调用的 Webhook 不可以变更对象。

如果以此方式调用的 Webhook 有其它副作用(如:减少配额),则它 必须 具有协调机制。 这是因为无法保证后续的 Webhook 或其他验证性准入控制器都允许请求完成。

如果你禁用了 ValidatingAdmissionWebhook,还必须通过 --runtime-config 标志来禁用 admissionregistration.k8s.io/v1 组/版本中的 ValidatingWebhookConfiguration 对象。

查看当前集群的 validatingwebhookconfigurations

┌──[root@vms100.liruilongs.github.io]-[~/ansible/k8s-hello-mutating-webhook/k8s-hello-mutating-webhook/k8s/csr]
└─$kubectl get validatingwebhookconfigurations
NAME                                     WEBHOOKS   AGE
config.webhook.pipeline.tekton.dev       1          203d
ingress-nginx-admission                  1          292d
istio-validator-istio-system             1          277d
istiod-default-validator                 1          277d
metallb-webhook-configuration            7          292d
release-name-kube-promethe-admission     1          276d
validating-webhook-configuration         11         285d
validation.webhook.pipeline.tekton.dev   1          203d

变更

变更相关对 准入控制器,更多是对默认值的设置,比如,默认SC,IC 的配置,部分节点的默认标签的添加

DefaultStorageClass

此准入控制器监测没有请求任何特定存储类PersistentVolumeClaim 对象的创建请求, 并自动向其添加默认存储类。 这样,没有任何特殊存储类需求的用户根本不需要关心它们,它们将被设置为使用默认存储类

当未配置默认存储类时,此准入控制器不执行任何操作。如果将多个存储类标记为默认存储类, 此控制器将拒绝所有创建 PersistentVolumeClaim 的请求,并返回错误信息。 要修复此错误,管理员必须重新检查其 StorageClass 对象,并仅将其中一个标记为默认。 此准入控制器会忽略所有 PersistentVolumeClaim 更新操作,仅处理创建操作。

DefaultIngressClass

该准入控制器监测没有请求任何特定 Ingress 类的 Ingress 对象创建请求,并自动向其添加默认 Ingress 类。 这样,没有任何特殊 Ingress 类需求的用户根本不需要关心它们,他们将被设置为默认 Ingress 类

当未配置默认 Ingress 类时,此准入控制器不执行任何操作。如果有多个 Ingress 类被标记为默认 Ingress 类, 此控制器将拒绝所有创建 Ingress 的操作,并返回错误信息。 要修复此错误,管理员必须重新检查其 IngressClass 对象,并仅将其中一个标记为默认 (通过注解 “ingressclass.kubernetes.io/is-default-class”)。 此准入控制器会忽略所有 Ingress 更新操作,仅处理创建操作。

StorageObjectInUseProtection

StorageObjectInUseProtection 插件将 kubernetes.io/pvc-protectionkubernetes.io/pv-protection 终结器(finalizers)添加到新创建的持久卷申领(PVC)持久卷(PV)中。如果用户尝试删除 PVC/PV,除非 PVC/PV 的保护控制器移除终结器, 否则 PVC/PV 不会被删除

TaintNodesByCondition

该准入控制器为新创建的节点添加 NotReady 和 NoSchedule 污点。 这些污点能够避免一些竞态条件的发生,而这类竞态条件可能导致 Pod 在更新节点污点以准确反映其所报告状况之前,就被调度到新节点上。

DefaultTolerationSeconds

此准入控制器基于 k8s-apiserver 的输入参数 default-not-ready-toleration-secondsdefault-unreachable-toleration-seconds 为 Pod 设置默认的容忍度,以容忍 notready:NoExecuteunreachable:NoExecute 污点 (如果 Pod 尚未容忍 node.kubernetes.io/not-ready:NoExecute 和 node.kubernetes.io/unreachable:NoExecute 污点的话)。 default-not-ready-toleration-seconds 和 default-unreachable-toleration-seconds 的默认值是 5 分钟。

MutatingAdmissionWebhook

此准入控制器调用任何与请求匹配的变更(Mutating) Webhook。匹配的 Webhook 将被顺序调用。 每一个 Webhook 都可以自由修改对象。

MutatingAdmissionWebhook,顾名思义,仅在变更阶段运行。

如果由此准入控制器调用的 Webhook 有副作用(如:减少配额), 则它 必须 具有协调系统,因为不能保证后续的 Webhook 和验证准入控制器都会允许完成请求。

如果你禁用了 MutatingAdmissionWebhook,那么还必须使用 --runtime-config 标志禁止 admissionregistration.k8s.io/v1 组/版本中的 MutatingWebhookConfiguration, 二者都是默认启用的

当前集群默认的 MutatingWebhookConfiguration

┌──[root@vms100.liruilongs.github.io]-[~/ansible/k8s-hello-mutating-webhook/k8s-hello-mutating-webhook/k8s/csr]
└─$kubectl get MutatingWebhookConfiguration
NAME                                   WEBHOOKS   AGE           1          131m
istio-revision-tag-default             4          277d
istio-sidecar-injector                 4          277d
mutating-webhook-configuration         8          285d
release-name-kube-promethe-admission   1          276d
webhook.pipeline.tekton.dev            1          203d

变更和验证

LimitRanger

此准入控制器会监测传入的请求,并确保请求不会违反 Namespace 中 LimitRange 对象所设置的任何约束。 如果你在 Kubernetes 部署中使用了 LimitRange 对象,则必须使用此准入控制器来执行这些约束。

LimitRanger 还可以用于将默认资源请求应用到没有设定资源约束的 Pod; 当前,默认的 LimitRanger 对 default 名字空间中的所有 Pod 都设置 0.1 CPU 的需求。

ServiceAccount

此准入控制器实现了 ServiceAccount 的自动化。强烈推荐为 Kubernetes 项目启用此准入控制器。 如果你打算使用 Kubernetes 的 ServiceAccount 对象,你应启用这个准入控制器。

RuntimeClass

如果你所定义的 RuntimeClass 包含 Pod 开销, 这个准入控制器会检查新的 Pod 。 被启用后,此准入控制器会拒绝所有已经设置了 overhead 字段的 Pod 创建请求。 对于配置了 RuntimeClass 并在其 .spec 中选定 RuntimeClass 的 Pod, 此准入控制器会根据相应 RuntimeClass 中定义的值为 Pod 设置 .spec.overhead

.spec.overhead 字段用于为 Pod 指定额外的资源开销。这些额外的开销是针对 Pod 本身的,而不是容器内的应用程序。.spec.overhead 字段的值应该小于或等于 Pod 容器中设置的资源限制(resources.limits

.spec.overhead 字段通常用于指定与 Pod 相关的基础设施级别的开销,例如用于 Pod 网络、存储或其他基础设施组件的附加资源。

自定义准入控制器

内置的准入控制器并不是不可以改变的,可以通过 AdmissionConfiguration 来自定义准入控制器,调整部分参数,下面为对 PodSecurity 准入控制器参数自定义

apiVersion: apiserver.config.k8s.io/v1 # 查阅兼容性说明
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
  configuration:
    apiVersion: pod-security.admission.config.k8s.io/v1
    kind: PodSecurityConfiguration
    # 当未设置 mode 标签时会应用的默认设置
    #
    # level 标签必须是以下取值之一:
    # - "privileged" (默认)
    # - "baseline"
    # - "restricted"
    #
    # version 标签必须是如下取值之一:
    # - "latest" (默认) 
    # - 诸如 "v1.28" 这类版本号
    defaults:
      enforce: "privileged"
      enforce-version: "latest"
      audit: "privileged"
      audit-version: "latest"
      warn: "privileged"
      warn-version: "latest"
    exemptions:
      # 要豁免的已认证用户名列表
      usernames: []
      # 要豁免的运行时类名称列表
      runtimeClasses: []
      # 要豁免的名字空间列表
      namespaces: []

需要说明的是 yaml 文件需要通过 ——admission-control-config-file 指定到 kube-apiserver,不能直接 apply

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


准入控制器参考:

https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/

Kubernetes 准入控制器指南:

https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

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

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

相关文章

【Qt开发流程】之对象模型2:属性系统

描述 Qt提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt不依赖于非标准的编译器特性,如__property或[property]。 Qt解决方案适用于Qt支持的所有平台上的任何标准c编译…

高性能网络编程 - 白话TCP 三次握手过程

文章目录 概述TCP协议头的格式TCP Finite State Machine (FSM) 状态机三次握手如何在 Linux 系统中查看 TCP 状态 概述 每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。 我们需要知道 TCP在网络OSI的七层模型中的第四层——Transport层 -----------…

百度智能云正式上线Python SDK版本并全面开源

文章目录 前言一、SDK的优势二、千帆SDK:快速落地LLM应用三、如何快速上手千帆SDK3.1、SDK快速启动3.2. SDK进阶指引 3.3. 通过Langchain接入千帆SDK4、开源社区 前言 百度智能云千帆大模型平台再次升级!在原有API基础上,百度智能云正式上线…

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

周周爱学习之Redis重点总结

redis重点总结 在正常的业务流程中,用户发送请求,然后到缓存中查询数据。如果缓存中不存在数据的话,就会去数据库查询数据。数据库中有的话,就会更新缓存然后返回数据,数据库中也没有的话就会给用户返回一个空。 1.缓…

【6】PyQt信号和槽

1. 信号和槽简介 信号和槽机制是 QT 的核心机制,应用于对象之间的通信 信号和槽是用来在对象间传递数据的方法当一个特定事件发生的时候,signal会被emit出来,slot调用是用来响应相应的signal的Qt中对象已经包含了许多预定义的 signal&#…

全网最新最全的Appium自动化:使用appium后安卓手机无法调出键盘解决方法

问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘。 原因:appium调试时,将手机输入法设置成了Unicode IME 注:按键详细操作参考:转载至 作者:oscarforever 地址&#xff1…

Java链接数据库

本文介绍的是Java链接数据库中的JDBC操作,JDBC虽然现在用的不多,但面试的时候会问道。需要有相应的了解。下面以链接MySQL为例子。 JDBC 什么jdbc Java DataBase Connectivity是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和…

制作一个RISC-V的操作系统五-RISC-V汇编语言编程一

文章目录 RISC-V汇编语言入门汇编语言概念简介 汇编语言语法介绍(GNU版本) RISC-V汇编语言入门 汇编语言概念简介 高级:可以理解就是更贴近人的理解 低级:可以理解就是更贴近机器的 难移植:汇编指令基本上和机器指令…

对标Gen-2!Meta发布新模型,进军文生视频赛道

随着扩散模型的飞速发展,诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢,因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…

网络模拟与网络仿真

目录 一、概念界定 二、模拟(simulation)与仿真(emulation) 2.1 模拟(simulation) 2.2 仿真(emulation) 2.3 区分 三、网络模拟与网络仿真 3.1 网络模拟 3.2 网络仿真 3.…

软件测试要学习的基础知识——黑盒测试

黑盒测试概述 黑盒测试也叫功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作是一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,只检查程序功能是否按照…

解析 Smilee Finance:基于无偿损失的链上期权方案

“有了 Smilee Finance,无偿损失或许不再是一种损失,它也更可能是一种可组合性的收益” 无偿损失 流动性挖矿是引燃 DeFi Summer 的导火索,在 AMM DEX 中,它允许用户将资产按照比例添加到 AMM 流动性池中成为 LP,以为交…

POJ 3233 Matrix Power Series 动态规划(矩阵的幂)

一、题目大意 给出一个矩阵A, 输出矩阵B的每一项对M取余数的值。 二、解题思路 以二维矩阵为例,首先计算K2的情况,我们设结果矩阵为B 有如下表达式 那么不难看出,需要的矩阵其实就是以下的两个矩阵相乘后的左上角的N*N个 然后…

RoPE旋转位置编码浅析

RoPE旋转位置编码浅析 本文介绍了旋转位置编码RoPE在大模型中的广泛应用,包括Llama、Mistral 7B、Baichuan、ChatGLM、Qwen、…等。由于计算资源限制,大模型通常在较小的上下文长度中进行训练,导致在推理超出预训练长度时性能显著下降。为了解决这个问题,涌现了许多基于Ro…

火山引擎DataTester升级MAB功能,助力企业营销决策

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 DataTester,火山引擎推出的 AB 测试与智能优化平台,近日宣布对其 MAB(Multi-armed Bandit)功能进行了升级&#xff0…

如果不小心修改了按钮的名字并且忘记了原名字

出现上述情况,可以右边点击转到代码,注释掉问题行,此页的设计界面就恢复了。

MySQL主从复制(一主一从、双主双从)

一、概述 1. 数据库主从概念、优点、用途 主从数据库是什么意思呢,主是主库的意思,从是从库的意思。数据库主库对外提供读写的操作,从库对外提供读的操作。   数据库为什么需要主从架构呢? 高可用,实时灾备&#x…

股价暴涨192%后,夏威夷控股股票还值得买入吗?

来源:猛兽财经 作者:猛兽财经 这两家公司计划组建一个横跨太平洋的航空公司 阿拉斯加航空(ALK )近期宣布它已和夏威夷航空(HA)达成协议,将以19亿美元现金和承担债务的方式收购夏威夷控股的母公司。 但这一消息却使两家公司的股价走向了相反的…

技术面试时,被问及职业规划,怎么回答才加分?

对于职场人士来说,但凡涉及到面试,90%以上的概率你会被问到职业规划。而作为一个技术人士,本身的表达能力就比硬实力薄弱一些。很多人一上来的回答就是:先做技术岗,阅历深点了做管理。这样的回答,往往前脚刚…
最新文章