0%

前言

我在 Azure 有一台虚拟机,是 B1s 系列的。最近发现变得很卡,使用top命令排查发现sysi都很高:

%Cpu(s): 52.1 us, 21.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi, 26.0 si,  0.0 st

排查过程

鉴于sy排查会比较复杂,所以先从简单的si开始。使用命令watch -n1 -d cat /proc/interrupts查看软中断情况:

问题描述

某日登录服务器发现我用screen挂起来的任务没了。看了下uptime发现系统启动时间不对,遂登录 Azure 查看虚拟机的 Activity log,发现:

Install OS update patches on virtual machine | Succeeded | 23 hours ago

这条日志的时间刚好和服务器重启时间对上了。

现象

神经网络训练,一开始准确率很高,然后逐渐下降。如下所示:

Epoch 	 Time 	 Train Loss 	 Train ACC 	 Val Loss 	 Val ACC 	 Test Loss 	 Test ACC 	 LR
1	 197.8234 	 0.0053 	 0.8645 	 0.0412 	 0.1443 	 0.0412 	 0.1443 	 0.0100
2	 108.6638 	 0.0084 	 0.7311 	 0.0272 	 0.1443 	 0.0272 	 0.1443 	 0.0100
3	 108.4892 	 0.0095 	 0.6777 	 0.0267 	 0.1443 	 0.0267 	 0.1443 	 0.0100
4	 108.8819 	 0.0087 	 0.7102 	 0.0269 	 0.1443 	 0.0269 	 0.1443 	 0.0100
5	 108.8337 	 0.0065 	 0.7712 	 0.0504 	 0.1443 	 0.0504 	 0.1443 	 0.0100
6	 109.4179 	 0.0061 	 0.8071 	 0.0624 	 0.1443 	 0.0624 	 0.1443 	 0.0100
7	 109.2300 	 0.0057 	 0.8349 	 0.0762 	 0.1443 	 0.0762 	 0.1443 	 0.0075
8	 109.2820 	 0.0101 	 0.6432 	 0.0245 	 0.1443 	 0.0245 	 0.1443 	 0.0075

具体现象是 Train ACC 一开始特别高,但 Val ACC 很低。随着 epoch 增加, Train ACC 开始下降,Val ACC 几乎不变。

前言

Setonix 是南半球最强大的超级计算机,也是我用过的最不稳定的超级计算机。平均一个月炸一次,例如升级固件升炸了,Lustre文件系统炸了等等……

因为是用 AMD Instinct MI250X GPU,所以 PyTorch 后端用的是 ROCm。这个环境有就各种奇奇怪怪的问题。

排序算法

排序算法最坏时间复杂度平均时间复杂度最好时间复杂度空间复杂度是否稳定是否原地
选择排序n^2n^2n^21不是
插入排序n^2n^2n1
归并排序nlognnlognnlognn不是
快速排序n^2nlognnlognlogn不是
堆排序nlognnlognnlogn1不是
Tree Sortn^2nlognnlogn1不是
  • 快速排序空间复杂度的logn是递归过程的内存占用。
  • 快速排序是否稳定和是否原地取决于分区函数,一般实现是原地排序并且不稳定。
  • 堆排序建堆过程的时间复杂度是n。
  • Tree Sort 构建过程是nlogn,遍历是n。如果树极度不平衡,则退化成链表,时间变成n^2。

数据结构

一些数据结构的操作的时间复杂度。