[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...
[TOC]一、张量基本运算基本运算中,包括 add、sub、mul、div、neg 等函数, 以及这些函数的带下划线的版本 add_、sub_、mul_、div_、neg_,其中带下划线的版本为修改原数据。操作类型函数示例代码代码解释加法(不修改原数据)addnew_data = data.add(10)将每个元素加上10,生成一个新张量。加法(修改原数据)add_data.add_(10)将每个元素加上10,直接修改原数据。减法subdata.sub(100)将每个元素减去100,生成一个新张量。乘法muldata.mul(100)将每个元素乘以100,生成一个新张量。除法divdat...
[TOC]前言PyTorch 是一个 Python 深度学习框架,它将数据封装成张量(Tensor)来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的一些运算、处理的方法被封装在类中。一、理解 TensorTensor 可以简单理解为是标量、向量、矩阵的高维扩展。你可以把张量看作多维数组,但相较于ndarray,Tensor 包含了grad、requires_grad、grad_fn、device 等属性,是为服务于神经网络而设计的类型。标量可以看作是零维张量、向量可以看作是一维张量、矩阵可以看作是二维...