[TOC]一、概述Prometheus Exporter是一个用来收集和暴露指标数据的工具,通过与Prometheus监控系统一起使用。它的结构包括两个组件:Collector和Exporter:Collector:用于从目标应用程序或系统收集指标并将其转化为Prometheus可识别的格式。收集器可以使用Prometheus客户端库来生成指标,并公开HTTP/metrics以便Prometheus Server进行定期调用和拉取指标。Exporter:它会从Collector获取指标数据,并将其转成为Prometheus可读格式。Prometheus Server:它是一个用于存储和查...
[TOC]一、概述Prometheus 是由 Cloud Native Computing Foundation(CNCF) 孵化的开源监控与告警系统,专注于实时数据采集、存储和查询,广泛应用于云原生、容器化(如 Kubernetes)和微服务架构中。它以灵活的数据模型、强大的查询语言和生态扩展性著称,是现代 DevOps 和 SRE(站点可靠性工程)的核心工具之一。Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化环境比如 VM 或...
[TOC]一、容器监控方案介绍虽然传统的物理机和虚拟机监控已经有了比较成熟的监控方案,但是容器的监控面临着更大的挑战,因为容器的行为和本质与传统的虚拟机是不一样的,总的来说,容器具有以下特性:容器是短期存活的,并且可以动态调度;容器的本质是进程,而不是一个完整操作系统;由于容器非常轻量,容器的创建和销毁也会比传统虚拟机更加频繁。Docker 容器的监控方案有很多,除了 Docker 自带的docker stats命令,还有很多开源的解决方案,例如 sysdig、cAdvisor、Prometheus 等,都是非常优秀的监控工具。下面首先来看下,不借助任何外部工具,如何用 Docker 自...
[TOC]前言Kubernetes从1.9版本开始引入容器存储接口 Container Storage Interface (CSI)机制,用于在Kubernetes和外部存储系统之间建立一套标准的存储管理接口,通过该接口为容器提供存储服务。K8s 持久化存储经历了从 in-tree Volume 到 CSI Plugin(out-of-tree) 的迁移,一方面是为了将 K8s 核心主干代码与 Volume 相关代码解耦,便于更好的维护;另一方面则是为了方便各大云厂商实现统一的接口,提供个性化的云存储能力,以期达到云存储生态圈的开放共赢。一、CSI介绍1.1 概述CSI是Contain...
[TOC]一、哈希表哈希表是一个很常见的数据结构,用来存储无序的 key/value 对,给定的 key 可以在 O(1) 时间复杂度内查找、更新或删除对应的 value。设计一个好的哈希表,需要着重关注两个关键点:哈希函数、冲突处理。1.1 哈希函数理想情况下,哈希函数既要有优异的性能,又要让结果在映射范围内均匀的分布,使得增删改查的时间复杂度为 O(1)。不过实际情况是,key 的数量往往会大于映射的范围,这势必产生哈希冲突,以及更差的读写性能。最坏的结果可能会是所有操作的时间复杂度可能会达到 O(n),比如结果都映射到一个 bucket(桶)上,最后变成线性查找了。因此好的哈希函数...
[TOC]一、简单示例首先来看一下最简单的Ray程序是如何编写的。# 导入ray,并初始化执行环境 import ray ray.init() # 定义ray remote函数 @ray.remote def hello(): return "Hello world !" # 异步执行remote函数,返回结果id object_id = hello.remote() # 同步获取计算结果 hello = ray.get(object_id) # 输出计算结果 print hello在Ray里,通过Python注解@ray.remote定义remote...
[TOC]一、Ray框架简介Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。Ray支持多种编程范式,包括任务并行、Actor模型、分布式对象存储等。现在的机器学习等任务在性能(任务高速响应),灵活性(计算任务差异),可靠性方面都有很高要求,因此设计一个新的计算框架Ray,提出了逻辑中心控制状态板(GCS)的概念,采用分片的分布式存储系统,提供一种自底向上的分布式调度器来实现。由上面的Ray 框架图来看,Ray Core即是底层的核心实现,使得开发者能基于此,在本地机器、K8s集群或者各种云...
[TOC]一、简介1.1 基本概念张量索引是根据张量的位置或值选择特定元素或子集的过程。PyTorch 张量索引提供了一组丰富的索引操作,可以使用不同的索引方案选择和修改张量元素。在 PyTorch 中,张量是一个多维数组,可以存储不同类型和大小的数值数据。可以使用一个或多个索引对张量进行索引,这些索引指定元素沿张量每个维度的位置。索引张量将返回一个包含所选元素的新张量或具有修改元素的原始张量的视图。1.2 索引类型张量索引主要有以下几种类型:整型索引(Integer Indexing):使用一个或多个整型值来访问张量中的特定元素或子张量。例如,对于一个形状为(3, 4)的二维张量A,A...
[TOC]前言在本文中,将介绍在Pytorch中如何进行张量的维度变换。张量是Pytorch中的核心数据结构,类似于多维数组,并且可以在GPU上进行加速运算。通过改变张量的维度,可以更灵活地处理数据,在机器学习和深度学习任务中具有重要意义。一、张量的维度与形状张量为一组数的结构化表示。简单理解,向量就是一维数组,矩阵为二维数组,此外还可以定义更高维度的数组。张量创建示例如下:# 一维向量 t1 = torch.tensor((1, 2)) # 二维向量 t2 = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 三维向量 t3 = torch.tensor([...
[TOC]一、张量转换为 numpy 数组使用Tensor.numpy函数可以将张量转换为ndarray数组,但是共享内存,可以使用copy函数避免共享。代码示例import torch # 1. 张量转换为numpy数组 def test01(): data_tensor = torch.tensor([2,3,4]) # 将张量转换为numpy数组 data_numpy = data_tensor.numpy() print(type(data_tensor)) #<class 'torch.Tensor'> print...