Argo workflow v.s. Tekton
在云原生的世界里,持续集成/持续交付(CI/CD)工具起着至关重要的作用,Argo和Tekton作为两款备受瞩目的工具,各自具有独特的特点和优势。本文将从多个方面对它们进行详细对比,帮助大家更好地理解和选择适合自己项目的 CI/CD 解决方案。
Argo核心概念
Workflow: Workflow是Argo管理和调度的对象,用户可以通过UI和CLI提交一个Workflow让Argo去运行。一个Workflow作为Kubernetes CRD来实现。
Template:一个Workflow可以定义一个或者多个Template,通常会以Pod的形式来运行。入口template可以通过entrypoint来指定。
Template tags: 也称为Template variables。它由{{}}来分割并在运行时被替换为具体的值。
Template有两种类型,一种是Work,另外一种是Orchestrate。
Work类型的template有以下几种, 它们都会以Pod的形式来运行:
container set允许Pod中运行多个容器.
da ...
如何给云计算用户提供安全可靠的操作系统镜像
在云计算环境中,操作系统镜像作为用户创建云实例的基础模板,其安全性和可靠性直接影响着用户应用和数据的安全。一旦操作系统镜像存在安全漏洞,可能导致大规模的安全事件,如数据泄露、恶意软件传播等。因此,研究如何给云计算用户提供安全可靠的操作系统镜像具有极为重要的现实意义。
操作系统镜像的分类
云平台镜像(stock image):云平台镜像是指云计算平台官方提供的,经过平台定制化、验证过的操作系统镜像。由云平台负责镜像的生命周期管理。
用户自定义镜像(custom image):用户自定义的镜像通常保存了用户特定的配置,安装了特定的软件。由用户自己管理镜像的生命周期。
第三方镜像(catalog image):第三方镜像是指第三方的供应商提供的操作系统镜像,由第三方供应商负责管理镜像的生命周期,由云平台负责审核与验证。
操作系统镜像的生命周期
可用/已验证(Available):表示镜像可以正常用于创建虚拟机、裸金属实例。
已弃用(Deprecated):表示镜像的操作系统版本已经不是最新的稳定版本。
已淘汰(Obsolete):表示镜像的操作系统版本已经结束支持。
如何保证操作系统镜像 ...
2024云-AI-计算国际合作论坛要点小结
坚持开放、兼容与自主创新来应对技术封锁
推进算力国产化,2030年国产化算力占比要达到90%以上
互联网+ 正在转变为AI+
人工智能从单模态向多模态发展
系统软件是制约我国AI发展的关键因素,智算的10种核心基础软件
并行系统:DeepSpeed, Megatron-LM, FairScale
编程框架:PyTorch
通信库:NCCL
AI编译器:tvm
算子库:cuBLAS, cuDNN
编程语言:CUDA, oneAPI
调度器
内存管理
容错系统
存储系统
构建国产万卡集群很重要也很难
异构卡、异地卡训练效果不好
与通算中心相比,智算中心功率密度更大,负载波动更大,交付时间更短
智算云计算架构包括智算基础设施、智算平台层和智算服务层,贯穿安全与稳定性保障
大模型训练中,电力费用占比65%,缺算到缺电
云计算从通用计算到混合计算再到异构计算,从CPU池化到GPU、NPU、TPU、DPU池化
大模型浪潮下,企业更需要私有化部署保护数据主权
企业落地AI的三大困境
资源困境:算力烧钱、投资风险
模型困境:模型难选、难用
应用困境:数据缺失、应用效果差
...
再会,蓝色巨人
今天收到了离职补偿金,算是正式和我摸告别了。也算是给我十一年零四个月的青春以及职业生涯上半场画上了句号。相信和大部分IBMer一样,我对公司并没有太多的怨怼之心。作为一个合格的中年人,我已经学会了隐藏自己内心最真实的想法,很少更新朋友圈或者其他的一些社交媒体。今天是个特殊的日子,再任性一次吧。总结总结过去,展望展望未来。
关于IBM很荣幸能够和很多优秀的IBMer及前IBMer们一起共事,虽然没能学到一丝半点,但毕竟是见识到了真正的牛人是什么样子的。
这里有优秀的职业经理人,记得第一次和老板one-one的时候,被问到“我能为你做些什么?你需要什么资源?”,是他让我明白优秀的管理者其实是服务者,他能协调好各种资源,能够调动员工的积极性,而不是简单地给员工分配任务,甚至PUA员工。
这里有真正的技术极客。曾经和组内大牛一起啃西瓜喝啤酒的时候,他突然想到了虚拟机热迁移的方案,竟然立马回家写代码去了。
这里也有擅长写专利的大神,每年可以发表十几个技术专利。
IBM的工作节奏很慢,我们组做的是从零开始的孵化项目,算是强度比较大的了,但是和互联网比,还是轻松很多。国外的同事就更轻松了,记得之 ...
微前端概要
微前端是什么?微前端是一种前端开发的架构风格,它将一个完整的前端应用拆分成多个小型的、独立的功能模块,这些模块被称为微前端。每个微前端都可以有自己的代码库、依赖包、自动化测试套件以及Devops流程。它们中的每一个极有可能由一个单独的前端团队负责,并且与其他功能模块相互独立地进行开发、测试和部署,从而提高了开发流程的效率。微前端在平台产品中应用尤为广泛。例如云计算平台中的各个服务可以通过微前端的方式嵌入到云平台前端控制台中。
微前端的优缺点优点:
独立开发和部署:每个微前端可以由不同的团队负责,团队可以自主决定开发进度和发布时间,无需与其他团队过度协调。比如一个专门负责用户个人中心微前端的团队,可以独立进行功能迭代和发布。
技术栈灵活:不同的微前端可以根据自身需求选择不同的技术栈。例如,一个微前端可以使用 React 框架,另一个可以使用 Vue 框架,这样可以充分利用各种技术的优势。
可扩展性强:能够根据业务需求,方便地添加、删除或更新微前端模块。当业务需要增加新功能时,只需要开发新的微前端并集成到系统中即可。
缺点:
微前端架构本身比单体架构复杂得多。需要设计合理的集成 ...
Kubernetes复习笔记
Kubernetes要解决什么问题?手动部署容器难以维护,使用容器编排技术可以解决如下问题:
容器崩溃的时候可以自动部署新的容器来代替
可以自动增加或者减少容器的数量来满足高可用和自动伸缩的需求
可以使用负载均衡来将流量分配到不同的容器中
不依赖于云服务提供商的通用配置
Kubernetes核心概念及架构Kubernetes架构图
Work node架构图
Master node架构图
Pod: kubernetes管理的主要对象,可以由一个或者共享资源的一组容器组成kubelet: 管理worker node和master node之间的通信kube-proxy: 运行在work node上,用于管理Node和Pod的网络通信API Server: 提供API服务Scheduler: 选择worker node运行PodController: 监控Pod数量,控制worker nodeWorker node: 运行Pod的机器或者虚拟机Master node: 运行Control Plane的机器或者虚拟机
Kubernetes核心对象
Pod: Kubernetes管理的最小单 ...
Python中常用的数据结构
用deque实现队列主要特点和优势:
高效的两端插入和删除操作:与列表相比,在队列的两端进行添加或删除元素的操作效率更高。时间复杂度为O(1),而在列表的开头进行插入或删除操作的时间复杂度通常为O(n),其中是列表的长度。
支持线程安全的追加和弹出:在多线程环境中,可以使用 deque 的 append 和 pop 方法,并且它们是线程安全的(需要适当的同步机制确保整体操作的线程安全)。
可设置最大长度:可以创建一个具有固定最大长度的 deque,当添加新元素超过最大长度时,会自动从另一端删除旧元素。
常用方法:
初始化:12d = collections.deque() # 创建一个空的双向队列。d = collections.deque([1, 2, 3]) # 用初始元素创建双向队列。
添加元素:12d.append(item) # 在队列右端添加一个元素。d.appendleft(item) # 在队列左端添加一个元素。
删除元素:12d.pop() # 删除并返回队列右端的元素。d.popleft() # 删除并返回队列左端的元素。
扩展队列:12d.ext ...
算法-动态规划
动态规划是一种解决多阶段决策过程最优化问题的数学方法。通常需要保存决策路径的问题用回溯法,而只是求最优解的时候选择动态规划。
基本概念
定义:动态规划通过把原问题分解为相对简单的子问题,并保存子问题的解,避免重复计算,从而高效地求解复杂问题。它通常适用于具有最优子结构和子问题重叠性质的问题。
最优子结构:一个问题具有最优子结构意味着问题的最优解可以由子问题的最优解组合而成。例如,在求解最短路径问题中,从起点到终点的最短路径可以由从起点到中间点的最短路径和从中间点到终点的最短路径组成。
子问题重叠:子问题重叠是指在求解问题的过程中,会多次重复地求解相同的子问题。动态规划通过保存子问题的解,避免了重复计算这些子问题,从而提高了算法的效率。
解题步骤
确定问题的状态:状态是描述问题在不同阶段的特征。选择合适的状态表示是动态规划的关键。例如,在背包问题中,可以用背包的剩余容量和已选物品的集合来表示状态。
定义状态转移方程:状态转移方程描述了如何从一个状态转移到另一个状态。它通常是根据问题的最优子结构性质推导出来的。例如,在背包问题中,状态转移方程可以表示为:dp[i][j] = max(dp ...
Python中的位图
在 Python 中,位图(Bitmap)是一种用于表示二进制数据的数据结构。它可以高效地存储和操作大量的布尔值(True/False)。
位图的基本概念位图通常由一个字节数组或位序列组成,其中每个位表示一个特定的状态或属性。例如,可以使用位图来表示一组整数是否存在于某个集合中,或者表示某个图形中的像素是否被选中。
Python 中实现位图的方法
使用内置的bytearray类型
bytearray是一个可变的字节序列,可以用来存储位图数据。每个字节可以表示 8 个位,通过位操作可以设置、清除和检查特定的位。例如:
12345bitmap = bytearray(10) # 创建一个可以存储 80 个位的位图# 设置第 5 个位为 1bitmap[5 // 8] |= 1 << (5 % 8)# 检查第 5 个位是否为 1is_set = (bitmap[5 // 8] & (1 << (5 % 8)))!= 0
使用第三方库bitarray库提供了一个更方便的位序列数据结构,可以高效地进行位操作。安装:pip install bitarray例 ...
Python中的collections
在 Python 中,collections是一个非常有用的内置模块,它提供了一些高性能的数据类型,可以帮助你更高效地处理数据。
namedtuple命名元组是一种可以为元组中的每个元素指定名称的数据类型。这使得代码更加可读,并且可以像访问对象属性一样访问元组的元素。
12345from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])p = Point(1, 2)print(p.x, p.y)
deque双端队列是一种可以在两端进行高效插入和删除操作的数据结构。它比列表更适合用于实现队列和栈。
123456from collections import dequedq = deque([1, 2, 3])dq.append(4)dq.appendleft(0)print(dq)
Counter计数器是一种用于统计可哈希对象出现次数的数据类型。它可以方便地统计列表、字符串等数据中的元素出现次数。
1234from collections ...