RISC-V 操作系统
参考
循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春
riscv-operating-system-mooc | Gitub
riscv-operating-system-mooc | Gitee
环境配置
建议使用 docker 容器来配置环境
12# 拉取 github 仓库git clone git@github.com:plctlab/riscv-operating-system-mooc.git
1234567# 从 dockerhub 拉取 ubuntu:20.04 镜像# https://hub.docker.com/layers/library/ubuntu/24.04/images/sha256-3963c438d67a34318a3672faa6debd1dfff48e5d52de54305988b932c61514cadocker pull ubuntu:20.04# 通过镜像创建 docker 容器, 并将 github 仓库对应的目录挂载到容器中docker run -dit --privileged=true --name risc ...
Large Language Model
关于 HuggingFace 和 ModelScope
HuggingFace 是一个模型和数据集的托管平台, 其中托管了大量的用于机器学习的开源模型和数据集, 你可以将其视为针对 Machine Learning 的 Github.
ModelScope 是一个由阿里达摩院推出的开源模型服务平台, 可以视为中国版的 HuggingFace.
关于 HuggingFace 的使用
Use the CLI | docs
关于 ModelScope 的使用
模型的下载 | docs
例如下载 Qwen2-0.5B-Instruct 模型
12# pip install modelscopemodelscope download --model qwen/Qwen2-0.5B-Instruct --local_dir /root/qwen/Qwen2-0.5B-Instruct
使用 vllm 的 api_server 在本地运行模型的一个服务
1python -m vllm.entrypoints.openai.api_server --model /root/qwen/Qwen2-0.5 ...
深入理解GPT
GPT的结构
首先我们需要了解 GPT 的结构. 例如下图是一个 GPT-1 的结构图, 中间的蓝色框选部分对应 n 个 Transformer 的 Block, 左边为输入和 Embedding 层, 右边为输出预测以及 Loss.
关于输入
原始的输入为一个 [Batch_size, Time_step] 大小的矩阵. 例如字符级别的生成(预测), 输入为 "To be or not to be", 算上空格这是一个 Batch_size=1, Time_steps = 18 的输入.
如何对输入字符进行编码
例如针对 tinyshakespeare 这个文本, 我们统计出其中有 65 种字符, 并按照 ASCII 码的值对它们进行排序
1234567891011with open('input.txt', 'r', encoding='utf-8') as f: text = f.read()chars = sorted(list(set(text))) # len = 65# here ar ...
VSCode&Docker
关于如何让保障机连公司外网下载 VsCode 插件的操作
目前我们有一台公用的可以连公司外网的服务器, IP地址是 172.xx.x.xx, 我在上面挂载了一个 Squid 代理, 端口号为 10022. 现在大家只需要在自己的保障机 (不能连外网) 上配置代理地址为 http://172.xx.x.xx:10022 即可通过代理访问外网, 具体操作如下
123456789101112# 1. 连接保障机ssh yourserver# 2. 在 /etc/profile.d/proxy.sh 中添加配置vim /etc/profile.d/proxy.sh# 添加如下内容, :wqexport http_proxy=http://172.xx.x.xx:10022export https_proxy=http://172.xx.x.xx:10022export no_proxy="localhost"# 3. source执行profilesource /etc/profile# 4. 测试wget baidu.com
之后可以正常通过 VsCode 的 Remot ...
Potsdam Dataset
ISPRS-Potsdam
The Potsdam dataset is for urban semantic segmentation used in the 2D Semantic Labeling Contest - Potsdam.
The dataset can be requested at the challenge homepage. You need to get a package file named utf-8' 'Potsdam.zip (size: 13.3GB), and unzip this package to get a folder named Potsdam which contains 10 files as follows:
1234567891011Potsdam├── 1_DSM.rar├── 1_DSM_normalisation.zip├── 2_Ortho_RGB.zip <--├── 3_Ortho_IRRG.zip├── 4_Ortho_RGBIR.zip├── 5_Labels_all.zip <--├── 5_L ...
模型量化
参考
浮点和整数的存储
不同数据类型在机器中的存储大小
type
size
min
max
char
1
-128
127
unsigned char
1
0
255
short int
2
-32768
32767
unsigned short int
2
0
63535
int
4
-2147483648
2147483647
unsigned int
4
0
4294967295
long int
8
-2147483648
2147483647
unsigned long int
8
0
4294967295
float
4
double
8
浮点数的表示
IEEE浮点标准用 V=(−1)s×M×2EV = (-1)^s \times M \times 2^EV=(−1)s×M×2E 的形式来表述一个浮点数:
sss : 符号(sign)s 决定这个浮点数的正(s=0)负(s=1)
MMM : 有效数(significant)M 是一个二进制小数,它的范围在 [1∼2−ϵ][1\sim 2-\epsilon][1 ...
算法模块
参考
高性能计算方向面试问题总结 | zhihu
C++
原子操作
【C++11 多线程】原子操作(六)
深度学习模块
如何理解过拟合
数据集类比于约束项,模型参数类比于自由度。约束项越少,自由度约大,就越不容易确定一个具体的模型。例如只有两个点的数据,希望得到一个线性模型。如果用 ax + b, 两个参数的模型去拟合是刚刚好的;如果用 ax^2 + bx + c, 三个参数的模型去拟合就会出现多种情况,不一定会得到 a=0 的线性情况。此时的解决方法,一方面是提高数据的多样性,增加数据量;另一方面是对模型加以限制,让它能够更偏向于理想的模型。
关于参数更新次数
模型训练过程中, 模型参数的更新次数取决于当前参数到全局/局部最优点的"距离". 同一个模型, 针对简单的数据集, 很有可能更新了非常多的轮次 loss 还在继续下降, 因为还没有达到全局最优. 而针对复杂的数据集, 很有可能更新很少的轮次 loss 就平稳了, 因为陷入了局部最优解.
如何理解激活函数
为什么需要激活函数?
基于非线性的考虑 (例如非线性激活函数 Sigmoid)
基于条件分支的考虑, ...
CUDA-CNN
CUDA-CNN
CUDA-CNN | Github
项目简介
这是一个用CUDA实现的 CNN (Convolutional Neural Network),使用MINIST数据集进行训练,epoch=10,耗时35.8s,在测试集上的分类正确率达到96.54%。
运行项目
1234567# clone项目到本地(需要CUDA环境)git clone git@github.com:whut-zhangwx/CUDA-CNN.gitcd ./cuda-cnn# 编译项目make all# 运行项目./CNN
网络结构
Input Layerinput↓(1,28,28)Conv2d Layer1Cin=1,Cout=6,kernel=6×5×5,stride=1↓(6,24,24)ActivationSigmoid Layer↓(6,24,24)Conv2d Layer2Cin=6,Cout=6,kernel=1×4×4,stride=4↓(6,6,6)ActivationSigmoid Layer↓(6,6,6)FC Layerfin=216,fout=10↓(10)Activati ...
Coding 算法题
刷题链接
LeetCode 热题 100
LeetCode 经典面试题 150
牛客 竞赛题库
洛谷 题目列表
OnlineJudge IO 练习
OJ在线编程常见输入输出练习场 | nowcoder
逗号分隔的输入
字符串排序(3) | nowcoder
12345678910111213141516171819202122232425#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { string strline; while(cin >> strline) { // get the whole line vector<string> strvec; string substr; int pos = 0; while((pos = strline.find(',')) != string::npos) ...
Linux基础
参考
Linux 教程 | 爱编程的大丙
文件管理命令
相对路径和绝对路径
相对路径
./:代表当前目前所在的目录,也可以使用.表示
../:代表当前目前所在的上一级目录,也可以使用..表示
1pwd # Print Working Directory
绝对路径
Linux: 起始结点为根目录,比如/root/home
Windows: 起始结点为某个盘符,比如C:\\Users
命令提示行
1zwx@7049GP-TRT:~/learning$ whoami # 查看当前用户
其中的zwx为当前用户名;7049GP-TRT为主机名
~为当前用户的home目录
12zwx@7049GP-TRT:~$ pwd/home/zwx
使用cd命令不带参数,默认切换到~
123zwx@7049GP-TRT:~/deeplearning$ cdzwx@7049GP-TRT:~$ pwd/home/zwx
$对应普通用户,#对应管理员用户
可执行程序对应的目录
123456zwx@7049GP-TRT:~$ which pwd/usr/bin/pwdzwx@7049GP- ...