- 博客(23)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 大规模分布式训练简介
什么是大规模分布式训练当模型越来越大,即模型中的神经元越来越多,权值数量也越来越多,运行模型所需要的内存超过单张卡的内存时, 此时需要多台机器很多张卡协调工作才能运行起整个模型。综上,大规模分布式训练即协调多台机器简单高效的运行大规模的模型。问题剖析[插一张庖丁解牛的图片]大规模分布式网络的明显特征是单张卡的内存放不下整个模型,假设运行模型所需的内存为 Requried_Momory,单卡的内存 Device_Memory, 则 Required_Memory >> Device_Me
2022-03-20 17:42:14
1911
4
原创 大规模分布式训练--模型并行策略
什么是模型并行随着深度学习领域的发展,研究人员发现模型越大训练出来的效果越好,因此模型越来越大成为深度学习领域的一个显著特征。但是越大的模型对设备的要求越高,即需要单卡的算力更强,内存空间更大。当单卡运行不能满足模型的要求时,往往需要多卡甚至多台机器协调工作,共同完成训练工作。但如何协调多卡/多机来完成大模型的训练,是大规模分布式训练所需要解决的问题。模型并行策略是大规模分布式训练很常见的策略之一。它通过将模型中特定子图中的权值均匀的分配到多张卡上,从而降低了模型对单卡的内存要求。帮助模型顺利运行起来
2022-03-13 17:25:16
5577
1
原创 reduce_scatter 通信
算子原型dist.reduce_scatter(output, input_list, op=<ReduceOp.SUM>, group=None, async_op=False)output(tensor): output tensorinput_list(list[tensor]): list of tensors to reduce and scattergroup(ProcessGroup, optional): the process group to work on, If
2021-07-27 21:13:07
3818
1
原创 职场经验:在容易和正确的事之间,选择正确的事
1)在容易和正确的事之间,选择正确的事案例:前段时间帮助ST学长做NLP的数据收集工作,有一个这样的需求:对原始数据清洗, 分词之后,需要确认分词后的单词是否都在词库中。抽象提炼之后的表述是:数据库中有N个样本,现在需要判断M个未知样本是否全部位于数据库之中,不在数据库中的单词列举出来。我的解决方案(easy way):收集N个样本组成一个列表List_N, 将M个未知样本组成列表List_M。遍历List_M,依次判断M个元素是否位于List_N中。我的方案存在的问题:从理论上来说,我的方案能完成需
2021-01-24 22:47:50
571
原创 ‘2>&1‘的庐山真面目
2>&1如果我们想保存程序的打印信息,为了保存完整的打印信息,通常我们会使用以下命令。那这个该怎么理解呢?command 2>&1 | tee logcommand > log 2>&1上面命令的意思是将command代码过程中打印的标准输出和标准错误代码一并重定向至log文件中。 Q:那什么是标准输出和标准错误,什么是重定向,标准输出和标准错误又有什么区别呢?下面一一揭晓:1. 标准输出和标准错误:两者默认都是输出到屏幕上
2021-01-17 14:53:04
136
原创 c++多线程编程--数据竞争
数据竞争如果多个线程同时访问同一个变量, 可能对引起数据竞争:如果这个访问是读操作,对这个数据没影响。如果这个访问是写操作,很有可能引起数据竞争。试想一下,如果线程A想要对主线程中的变量num进行加一操作,刚读取变量A的值后,时间片用完,转入阻塞状态,此时线程B主线程中的变量num进行加一操作。此后线程A再次执行,但还是用之前读取的num值进行操作,而没有感知到线程B已经对num变量进行过修改。互斥对象mutex对象是指定代码的访问。头文件#include<mutex>
2020-10-25 19:04:26
1532
原创 c++多线程编程--thread成员函数
thread成员函数thread类提供了丰富的成员函数帮助用户实现多线程编程。我们把构造函数单独拎出来作为一章来介绍。如下thread构造函数非构造函数的成员函数介绍:序号函数格式返回值意义1join()void让当前线程等待线程t执行完成2joinable()bool判断当前线程是否可以join3detach()void继续执行当前线程,不必等待线程t执行完成4get_id()std::thread::id获取线程id5st
2020-10-25 16:44:31
1525
原创 浅析c++中函数调用其他文件中的模板函数出错
错误描述在如下图所示的文件中展现的调用关系,在一个.cc(main.cc)文件中调用另一个.cc(test.cc)文件中的模板函数,编译过程出错。 // test.cc template<typename T> void function(T a) { ... } //test.h template<typename T> void function(T a); //main.cc int main() { int a=0; function(a)
2020-10-21 22:59:28
1748
原创 python的with语法
文章目录应用场景前生 -- try...finally语法标准版:形象版:语法解释:工作流程:case应用场景有一些任务,事前需要设置,事后需要清理。 对于这类任务,python提供了一套很方便的机制帮助用户完成事前事后的处理(嗯,就是替用户擦屁股),方便用户专注于自己的代码,同时也提高了代码的健壮性(毕竟只有用户用得爽,才会有回头客)。举个例子,python中读取文件,通常需要三步:> file = open("...")> file.read()> ... # do som
2020-10-13 23:04:47
287
1
原创 Singleton模式
背景在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性,以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计这的责任,而不是使用者的责任。定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。 《设计模式》 GoFcase...
2020-10-03 17:10:05
143
原创 工厂方法模式
背景在软件系统中,经常面临中创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。 --《设计模式》 GoFcase王者荣耀这款游戏,...
2020-10-01 17:24:03
249
原创 c++关键字:const mutable volatile
文章目录const场景1: 修饰变量场景2: 修饰指针场景3: 修饰函数场景4: 修饰类成员修饰类成员变量修饰类成员函数未经授权,禁止转载!创作不易,尊重原创!~~constconst,顾名思义,就是常量,其修饰的目标不能改变。这些目标主要包括变量,指针,函数,类。下面针对这四个目标对象进行不同的说明。场景1: 修饰变量const修饰变量,不论是放在数据类型前还是放在数据类型后,都是一个意思表示,该变量是一个常量。const T variable_name;T const variable
2020-09-22 23:44:45
119
原创 设计模式之观察者模式
设计模式组件模式之"Observer"(观察者模式)背景在软件构建过程中, 我们需要为某些对象建立一种“通知依赖关系”–一个对象(目标对象)的状态发生改变, 所有的依赖对象(观察者对象)都将得到通知,如果这样的依赖过于紧密,将使软件不能很好的抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。case王
2020-09-13 18:07:04
195
原创 c++编译错误: included multiple times, additional include site here
编译c++代码时出现如下错误信息:main.cc:2:10: note: './hello.h' included multiple times, additional include site here#include "hello.h"原因分析:我的代码结构如下, 在main.cc文件中由于world.h中已经导入过一次hello.h文件了,如果main.cc中include一次hello.h文件,则hello.h的头文件会被编译两次。这就是出错的原因了。// main.cc#includ
2020-09-12 16:54:18
1371
原创 c++中模板的那点事
概念对于功能一样的函数,只是参数的数据类型不同,每个函数都重复写一次,对程序猿来说是一个很低效的解决方案,模板函数在定义函数的时候不指定参数的具体类型,可以解决这一问题。模板函数是一种泛形编程,举一反三, 有没有。机制编译器在模板函数声明的地方做一些简单的简单的编译工作(替换),在遇到调用模板函数的地方,用实际的类型参数替换模板参数,进行重新编译。称为二次编译。特化泛形编程是一面双刃剑,泛形的树觉类型T理论上是包含所有数据类型的,但某些类型不适用于模板函数中的处理逻辑,因此要把这类函数拎出来单独
2020-09-05 12:08:08
564
原创 宏定义函数
概念在预编译阶段完成代码替换。优势(1)增加代码的可读性:宏定义的优点很多,但我个人理解宏定义最明显的优点就是增加代码的可读性。求圆的面积, 用“PI * r* r”比 “3.14人r”的可读性就强很多了。#define PI 3.14float circleArea(float r) { return PI * r * r;}(2)自带“模版函数”的buff:宏定义函数的参数没有数据类型,因此可轻松实现模板函数的功能#define MAX(a, b) (a > b ? a
2020-08-29 18:56:39
15114
1
原创 经典算法-并查集
huyanhuyu最近在看tensorflow中的placers算法, 发现其中应用了并查集算法来配置算子的设备device,因此学习了一下并查集相关的内容,记录下来。背景政府想要实施一项修路的惠民政策,要求县下面的各个镇都能够通过公路联通起来,如果没有直通的公路,通过其他镇的公路间接到达也行。求最低要修多少条路。假设县里有5个镇【1,2,3,4,5】, 修了3条公路, 如下:5,3 #镇的个数,公路数1,23,42,5分析,上面{1,2,5}是联通的,{3,4}是联通的,所以还需要再
2020-08-23 17:00:26
1057
原创 python中的装饰器
什么是装饰器@decoratordef target_func(): ...从字面理解, 装饰器就是用来装饰器目标函数target_func,既然是装饰,就不能修改目标函数执行,因此只能在目标函数target_func的首尾进行操作。因此装饰器适合用来做一些记录函数日志,统计函数执行时间等工作,这些功能在不同的函数中代码一致,因此可以将它抽象出来,统一来写。装饰器本质也是函数,这个函数的参数是函数。装饰器早期实现装饰器的早期(python version < 2.4)实现如下,通过函
2020-08-09 18:44:52
149
原创 python中的迭代器
(1) 概念所有可以用来执行“循环”操作的对象都必须是可迭代对象Iterable,即这类对象每次返回一个成员(元素)。基于Iterable,又衍生了Iterator和Generator两个数据结构。(2) 迭代器存在的原因:一言以蔽之就是节省内存,如果需要遍历一个很大的list, 内存不用开辟很大的一片空间来装整个list, 只需要分配list中一个元素大小的空间(假设list中每个元素所占内存大小一一样)即可。(3) 设计思路:1) Iterable可迭代对象1] feature拥有
2020-08-08 18:44:44
247
原创 shell中getopts
1.功能:处理命令行参数用法:格式getopts optstring variables栗子:while getopts ":d:" opt; do case $opt in d) DATE=`date` echo "hello, $OPTARG, date is $DATE" ;; ?) echo "Invalid options" ;; esacdone输出结果:>huyongandembp:
2020-07-13 23:55:17
170
1
原创 c 与c++中结构体struct
1.C语言中定义: typedef struct Student { int a; }Stu;或者: typedef struct { int a; }Stu;其中Student称为标签,可与struct一起组成类型名,即struct Student 等价于类型名,也与 Stu 等价。2.C++中的定义: struct Student1 { int a; ...
2018-02-25 23:57:30
423
mac怎么用shift键来切换大小写
2021-02-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人