THU-CS Internship Weeknote 1
对于参数服务器,有一个parameter gathering的任务;对于多GPU多机训练,可以将某个GPU作为参数服务器来存储数据。每次forward/backward后计算所需/所得的参数,要通过参数服务器进行参数聚合。
Page3:这里的Pull(R)和Push(W)就是d2l,PS一节写的,对PS抽象的pull、push操作;
从Page3的d图可知,随着client threads的上升,吞吐量立刻达到了瓶颈。在吞吐量达到bottleneck的同时,CPU利用率基本上也达到了100%;但是吞吐量才大约20 Mops/s(Million operations / second)每秒的百万次操作(应该指参数服务器的read/write(?
e图可知,indexing的延迟所需时间较多,gathering很少。
但是目前的proj并不会要求很多indexing方面的内容;
参数服务器主要关注Embedding层模型的操作和推理,因为embedding层的规模较大;embedding层通过PS算出feature vector后,会被投入 ...
RDMA & libibverbs 高性能网络基础设施学习与实践
TBD;
RDMA & verbs APIRDMA支持gather list和scatter list,即允许不连续的数据发送到连续的地址空间,或者将连续的数据发送到不连续的地址空间。这个能力tcp也可以可以通过readv或者writev做到,但是RDMA结合单边语义做到gather/scatter就非常的强大了。
RDMA verbs的qp建连资料:
(1)https://www.rdmamojo.com/2012/05/05/qp-state-machine/
(2)https://www.zhihu.com/column/c_1678877681314414592
RDMA和TCP不同,TCP本身的状态机转换,已经由其自己的下层实现了;但是RDMA本身的状态机需要用户自己维护,所以RDMA维护的困难之处:
(1)RDMA建立的qp链接构成的qp状态机需要调用者手动完成;
(2)RDMA qp链接的状态机更加复杂;
qp:queue pair
Reset: 这是qp的第一个状态,刚刚创建出来(通常是通过ibv_create_qp()创建)的qp处于该状态,该状态 ...
CUDA基础内容学习与实践
TBD,自用,图床To fix…
一般CUDA文件的后缀是.cu,当然用一般的.cpp也可以,只不过要在其头文件中加入CUDA调用API所在的库;
1__global__ 核函数
<<<4, 4>>> 使用4 * 4 共16个线程;
cudaDeviceSynchronize()是CPU和GPU的同步代码;
1234567891011121314#include <stdio.h>__global__ void hello_from_gpu(){ printf("Hello World from the GPU\n");}int main(void){ hello_from_gpu<<<4, 4>>>(); cudaDeviceSynchronize(); return 0;}
上述代码用如下的指令编译:
12nvcc test.cu -o test./test
编写的kernel在一个4 * 4的线程块上运行,所以会打印出16个Hel ...
链接与重定位学习:GNU/Unix下的链接(ld)工具使用与ELF格式文件的解析与理解
Elf文件的组织ELF(Executable and Linking Format files),可执行可链接格式文件,是Unix下标准的文件格式。一般我们可以将其分为可重定位目标文件下的ELF(也即链接视图下的ELF)和可执行目标文件下的ELF(也即执行视角下的ELF)
根据elf在man上的手册,ELF头可以分为32位和64位,表示为ElfN_Ehdr,这里的N取32或64;
123456789101112131415161718#define EI_NIDENT 16typedef struct { unsigned char e_ident[EI_NIDENT]; uint16_t e_type; uint16_t e_machine; uint32_t e_version; ElfN_Addr e_entry; ElfN_Off e_phoff; ElfN_Off e_shoff; uint32_t e_flags; uint16_t ...
Sed流式文本编辑工具:学习与使用
Sed:流编辑器的学习与使用Reference and Resources:
https://www.grymoire.com/Unix/Sed.html#uh-0
Sed的全名叫Ultimate Stream Editer,终极流编辑器。
Sed最重要的指令:s for substitutionsed最令人熟知的指令就是s了,这个替换指令可以将所有正则表达式出现到的匹配字符串变为一个新值。以下是一个简单的引例:
1echo day | sed 's/day/night/'
上面这个指令就会将正则表达式检索到的day替换为night了。
另一个重要的概念在于,sed是行向的。也就是说,如果你的输入文件有如下内容:
123one two three, one two threefour three two oneone hundred
接着输入该命令在bash中:
1sed 's/one/ONE/' < file
最后输出的结果如下所示:
123ONE two three, one two threefour three two ONE ...
数字电路基础复习
结合Verilog回顾,一并复习基础的数字电路设计verilog的本质是硬件描述语言,而不是硬件设计语言。
Syntax Explanation:
1234567module...endmodule 表征模块的开始和结束example: 模块名可有用户只丁宁,课包含字母、数字及下划线,需以字母开头,区分大小写assign: 赋值操作关键字,该关键字后可跟一个区赋值表达式,该关键字是实现组合逻辑操作的一种主要描述方式input/output: 表征该信号输入输出的方向。还有一个inout型。
例一:
tip:声明变量中,位宽的表示:从左到右依次为高位到低位,代表位宽为4的输入和输出端口。
12345678module gates( input [3:0] a, input [3:0] b, output [3:0] c); //注释和c类似,//代表注释, /* 大块注释这样实现 */ assign c = a & b;endmodule
例二:八输入与门
tip:
单独输出多位宽信号的一位或者多位的时候可以以这种方式单独处理,即a[7]
&a ...
Linux中常用的文本内容编辑器:介绍与学习
awk:Resource based:
https://www.tutorialspoint.com/awk/index.htm
AWK是目前最为著名的GNU/Linux文本编辑工具,它十分强大并且使用它简单明了的编程语言,在几行之内就可以解决复杂的文本处理任务。我们在下文中分别介绍AWK的总体背景、环境、工作流,并会解释具体的awk编程语法,变量定义、操作符、数组和循环,以及在awk中应用的函数。
前置知识:UNIX操作系统基础、Shell编程基础。
awk概览: AWK是一种集成编程语言,具有强大的文本处理功能,其命名来自于其作者:Alfred Aho, Peter Weinberger, and Brian Kernighan。有许多种awk,我们主要关注最重要也是最流行的awk内容即可。
awk工作流: 要成为awk变成专家,我们需要了解其内在运作的原理:Read, Execute and Repeat。ask会首先从BEGIN所在的代码块开始执行awk命令,然后以此从输入流文件中读取一整行,接着在取到的该行执行awk命令,若解析完该行后依旧没有到达文 ...
版本控制系统Git:学习与使用
Git对文件系统的建模 对于目录,将其建模成文件树,这样递归的结构可以很方便地组织文件。而文件本身,在git中被称为blob,被建模为文件树的一个个节点。对于整个历史版本的管理,Git通过有向无环图来维护不同的版本,每个版本都会保存一份对于历史文件的快照,以便进行文件的恢复和查找。
命令行编程:Shell Programming
命令行编程:Shell ProgrammingResources:
MIT CSAIL: The Missing Semester Lesson 2, https://missing-semester-cn.github.io/2020/shell-tools/
https://www.tutorialspoint.com/unix/shell_scripting.htm
TO BE IMPLEMENTED MORE DETAILED…
命令行变量的命名: 本节中,我们会介绍Unix Shell编程中变量的命名规则,变量本身作为一个字符串,我们在编程过程中会赋予其具体的值,这个具体的值可以是数字、文本、文件名、设备或任意其他种类的数据。 变量的本质,无非就是一个指向真实数据的指针,shell允许我们创建、赋值并删除变量。
合法的变量命名,只允许包含字母(a-z, A-Z),数字(0-9)以及下划线。传统来说,Unix shell变量都应该将其命名为大写变量。不能用!*和来进行命名都是因为他们在shell中有特殊意义。
变量的定义:123VAR_NAME=variable ...
常用的Linux Shell工具程序:学习、使用与范例
grep: Global Regular Expression Print系统学习一下grep工具(第n次遇到了)
grep - Global Regular Expression Print 全局正则表达式打印
grep是利用正则表达式来对文本文件进行检索的,它会输出给定模式相匹配的文本行内容,若没有给定输入文件,则grep会在当前文件递归搜索。grep有两个变式,分别是egrep和fgrep。这两个变式目前已经被弃用了,但是依旧保留在系统中,以提供向先前版本或程序的兼容性。现在已经被集成在grep的-E和-F选项中了,当然我们现在依旧可以用egrep和fgrep。
123以下内容摘自man grep: In addition, the variant programs egrep, fgrep and rgrep are the same as grep -E, grep -F, and grep -r, respectively. These variants are deprecated, but are provided for backw ...