From b9352b859556fc77cd0c8179cc84750d3a6374ec Mon Sep 17 00:00:00 2001 From: chn Date: Tue, 22 Oct 2024 18:13:55 +0800 Subject: [PATCH] init --- .gitattributes | 4 + .gitignore | 4 + archetypes/default.md | 5 + content/_index.md | 70 ++++++ content/about.md | 9 + content/blog/_index.md | 10 + .../blog/desktop-share/IMG20241002125815.jpg | 3 + .../blog/desktop-share/IMG20241002154007.jpg | 3 + .../blog/desktop-share/IMG20241002154445.jpg | 3 + content/blog/desktop-share/index.md | 71 ++++++ content/blog/helloworld.md | 50 ++++ .../blog/originpro-subtract-baseline/1.png | 3 + .../blog/originpro-subtract-baseline/2.png | 3 + .../blog/originpro-subtract-baseline/3.png | 3 + .../blog/originpro-subtract-baseline/index.md | 92 ++++++++ content/blog/raman-representation/index.md | 107 +++++++++ content/blog/share-home-over-nfs/index.md | 114 +++++++++ content/contact.md | 17 ++ content/docs/_index.md | 9 + content/docs/server/_index.md | 24 ++ content/docs/server/config.md | 139 +++++++++++ content/docs/server/job.md | 193 +++++++++++++++ content/docs/server/link/_index.md | 222 ++++++++++++++++++ content/docs/server/link/pageant1.png | 3 + content/docs/server/link/pageant2.png | 3 + content/docs/server/link/pageant3.png | 3 + content/docs/server/link/putty1.png | 3 + content/docs/server/link/putty2.png | 3 + content/docs/server/link/putty4.png | 3 + content/docs/server/link/putty5.png | 3 + content/docs/server/link/putty6.png | 3 + content/docs/server/link/rdp1.png | 3 + content/docs/server/link/rdp2.png | 3 + content/docs/server/link/winscp1.png | 3 + content/docs/server/link/winscp2.png | 3 + content/docs/server/link/winscp3.png | 3 + content/docs/server/link/winscp4.png | 3 + content/docs/server/qa/_index.md | 94 ++++++++ content/docs/server/qa/rdp1.png | 3 + content/docs/server/qa/rdp2.png | 3 + content/docs/server/start.md | 142 +++++++++++ content/docs/server/stat.md | 68 ++++++ content/docs/stuff/_index.md | 8 + content/docs/stuff/lottery/_index.md | 15 ++ content/docs/stuff/lottery/幸运抽奖.exe | 3 + data/icons.yaml | 10 + default.nix | 13 + hugo.yaml | 137 +++++++++++ layouts/partials/custom/head-end.html | 11 + 49 files changed, 1707 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 archetypes/default.md create mode 100644 content/_index.md create mode 100644 content/about.md create mode 100644 content/blog/_index.md create mode 100644 content/blog/desktop-share/IMG20241002125815.jpg create mode 100644 content/blog/desktop-share/IMG20241002154007.jpg create mode 100644 content/blog/desktop-share/IMG20241002154445.jpg create mode 100644 content/blog/desktop-share/index.md create mode 100644 content/blog/helloworld.md create mode 100644 content/blog/originpro-subtract-baseline/1.png create mode 100644 content/blog/originpro-subtract-baseline/2.png create mode 100644 content/blog/originpro-subtract-baseline/3.png create mode 100644 content/blog/originpro-subtract-baseline/index.md create mode 100644 content/blog/raman-representation/index.md create mode 100644 content/blog/share-home-over-nfs/index.md create mode 100644 content/contact.md create mode 100644 content/docs/_index.md create mode 100644 content/docs/server/_index.md create mode 100644 content/docs/server/config.md create mode 100644 content/docs/server/job.md create mode 100644 content/docs/server/link/_index.md create mode 100644 content/docs/server/link/pageant1.png create mode 100644 content/docs/server/link/pageant2.png create mode 100644 content/docs/server/link/pageant3.png create mode 100644 content/docs/server/link/putty1.png create mode 100644 content/docs/server/link/putty2.png create mode 100644 content/docs/server/link/putty4.png create mode 100644 content/docs/server/link/putty5.png create mode 100644 content/docs/server/link/putty6.png create mode 100644 content/docs/server/link/rdp1.png create mode 100644 content/docs/server/link/rdp2.png create mode 100644 content/docs/server/link/winscp1.png create mode 100644 content/docs/server/link/winscp2.png create mode 100644 content/docs/server/link/winscp3.png create mode 100644 content/docs/server/link/winscp4.png create mode 100644 content/docs/server/qa/_index.md create mode 100644 content/docs/server/qa/rdp1.png create mode 100644 content/docs/server/qa/rdp2.png create mode 100644 content/docs/server/start.md create mode 100644 content/docs/server/stat.md create mode 100644 content/docs/stuff/_index.md create mode 100644 content/docs/stuff/lottery/_index.md create mode 100644 content/docs/stuff/lottery/幸运抽奖.exe create mode 100644 data/icons.yaml create mode 100644 default.nix create mode 100644 hugo.yaml create mode 100644 layouts/partials/custom/head-end.html diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b487b89 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.png filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.webp filter=lfs diff=lfs merge=lfs -text +*.exe filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cf89879 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/themes +/public +/.hugo_build.lock +/resources/_gen diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..3de90ce --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ +--- +title: '{{ replace .File.ContentBaseName "-" " " | title }}' +date: {{ .Date }} +draft: true +--- diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..0edd652 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,70 @@ +--- +title: 欢迎页 +layout: hextra-home +--- + +{{< callout emoji="​🏗️" >}} + 站点仍在施工中,请戴好安全帽小心前行,谨防突然出现的 404。 +{{< /callout >}} + +
+{{< hextra/hero-headline >}} + 嗨,我的朋友! +{{< /hextra/hero-headline >}} +
+ +
+{{< hextra/hero-subtitle >}} + ~~我想我会喜欢你的~~
+ 想来看些什么呢? +{{< /hextra/hero-subtitle >}} +
+ +
+ +{{< hextra/feature-grid >}} + {{< hextra/feature-card + title="使用服务器" + subtitle="服务器的硬件配置,如何连接到服务器,以及在服务器上投递任务。" + link="/docs/server" + >}} + {{< hextra/feature-card + title="组会抽奖工具" + subtitle="~~万恶之源~~" + link="/docs/stuff/lottery" + icon="present" + >}} + {{< hextra/feature-card + title="VASP 原理和使用" + subtitle="有空一定写(flag +1)" + >}} +{{< /hextra/feature-grid >}} + + + +
+ +
+{{< hextra/hero-subtitle >}} + 我对技术不感兴趣,我只对你感兴趣: +{{< /hextra/hero-subtitle >}} +
+ +{{< hextra/feature-grid >}} + {{< hextra/feature-card + title="前往铜锣湾" + subtitle="我自己的联邦宇宙实例,是我平时发帖吐槽和分享日常的地方。" + icon="external-link" + link="https://铜锣湾.chn.moe/@chn" + >}} + {{< hextra/feature-card + title="阅读博客" + subtitle="略长的偏技术的文章,但又没有严肃到需要作为文档出现。" + link="/blog" + >}} +{{< /hextra/feature-grid >}} diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..cc117a6 --- /dev/null +++ b/content/about.md @@ -0,0 +1,9 @@ +--- +title: 关于本站 +--- + +{{< callout emoji="​🏗️" >}} + 早期施工中,请戴好安全帽小心前行,谨防突然出现的 404。 +{{< /callout >}} + +~~ALL RIGHTS RESERVED~~ diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..b990665 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,10 @@ +--- +title: "Blog" +--- + +
+{{< hextra/hero-badge link="index.xml" >}} + RSS Feed + {{< icon name="rss" attributes="height=14" >}} +{{< /hextra/hero-badge >}} +
diff --git a/content/blog/desktop-share/IMG20241002125815.jpg b/content/blog/desktop-share/IMG20241002125815.jpg new file mode 100644 index 0000000..ccfab8f --- /dev/null +++ b/content/blog/desktop-share/IMG20241002125815.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6eb7e27bee2b3088e1a0f0edb518f6d1f58eeaf80f3b7e567e2933704a2edb9e +size 4725914 diff --git a/content/blog/desktop-share/IMG20241002154007.jpg b/content/blog/desktop-share/IMG20241002154007.jpg new file mode 100644 index 0000000..b71c488 --- /dev/null +++ b/content/blog/desktop-share/IMG20241002154007.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d883edfcc7b51fc149ebe59e0a0decb1ac3a906ba39b7f13f590f4b407985e21 +size 6351228 diff --git a/content/blog/desktop-share/IMG20241002154445.jpg b/content/blog/desktop-share/IMG20241002154445.jpg new file mode 100644 index 0000000..692f76e --- /dev/null +++ b/content/blog/desktop-share/IMG20241002154445.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fec26f6c0dc3ad436ccdcab26e47b93236ea260f5aca4c0460a95075e83aea48 +size 7754813 diff --git a/content/blog/desktop-share/index.md b/content/blog/desktop-share/index.md new file mode 100644 index 0000000..ec50134 --- /dev/null +++ b/content/blog/desktop-share/index.md @@ -0,0 +1,71 @@ +--- +title: 桌搭更新 +date: 2024-10-02T15:26:17+08:00 +draft: false +summary: 俗话说差生文具多,所以我得补充一些文具。 +--- + +花了将近 500 块钱买了一堆在宿舍桌子上用的东西。来分享一下。 + +## 键盘 + +型号是 OMO100,购自淘宝“DM键帽社”,代组好之后发货的,茶轴,键帽是同一家的无尽夏,壳子是紫色的,总共 338 块钱。 +第一次用机械键盘,也是买的这些东西里面最满意的一个。 +详细看[这里](https://xn--s8w913fdga.chn.moe/notes/9yu82qf4rw)。 + +有个问题我忘了说:它的蓝牙连接不上我的笔记本。 +我的笔记本蓝牙连接任何别的设备都没问题,它的蓝牙连接我的任何别的设备也没问题,就是它俩连不上。 +我也不知道是谁的问题,就用 2.4G 接收器了。 + +## 平板支架 + +用来把 surface 支起来。 +因为想用 surface 的时候,总是会觉得没有地方放(因为桌子上已经放了一个笔记本电脑), + 所以想买个支架,平时把它丢到支架上插着充电(也就不怕没电了),想在床上用的时候拔下来就能用。 + +购买于淘宝,价格 31.81。仔细找了一家又便宜又支持比较大平板的。 + +买到后感觉它其实设计是用于床头的(虽然店铺里描述的是夹在桌子上), + 也就是夹在床头上把平板吊下来看的话,它的支架的运动方向是刚好合适的。 +夹在桌子上的话,可以调的角度有点太小。 + +图就不放了,拍出来感觉并不能看清它的结构。 + +## 笔记本竖放支架 + +就是两个这个东西,卡在C面和D面之间,就可以把笔记本竖起来。 +买我 37.9 块钱。我也不知道为啥这么贵,但是在网上找了一下没找到更合适的。 +卖家描述说是 3D 打印出来的,我也不知道真假。 +不过质感还不错。 + + + +唯一的问题是我用了一天之后发现不合适:我的笔记本只能打开到差不多 175 度, + 但要看得舒服的话,这样竖放时需要打开到 190 度或者 200 度。 +所以又买了一个支架,这个就闲置了。 + +## 第二个笔记本支架 + +花了 76.5 元,可以这样把笔记本架起来。可以方便地把屏幕拉过来或者推开。 + + + +这个支架虽然说能用,但是有很多可以吐槽的地方: +* 说明书发错了。没错说明书发错了,说明书是一个显示器支架的说明书。 + 然后我就发现,这个支架其实就是个显示器支架改装来的,就是加了一个用来支撑电脑的铁板,把铁板当作显示器固定在支架上就行。 +* 多发了非常多的零件。多发了很多用不上的**整包**的螺丝和垫片,我甚至都不用撕开螺丝的包装袋就装好了。 + 我怀疑我买的是某个型号的阉割版,去掉了一些功能,但多余的零件没去掉(这些螺丝的包装是连在一起的,可能不方便去掉)。 +* 但是上一条不能解释为什么卖家还给我发了一个玩具扳手。 + 支架全身没有任何一个螺母能匹配得上这个扳手的尺寸。 + 而且这个玩具扳手没有任何包装,就是直接丢在快递盒子里发过来的。 + 我都怀疑是卖家家里的小孩子不小心把玩具扳手丢了进来。 + +* 电脑放上去是斜的,需要手动调平。因为柱子在左边,电脑(重量)在右边,整体会压得支架向右倾斜。 + 其实显示器支架也会有类似的问题,但显示器本身是近似垂直于桌面的,显示器可以在显示器所在平面内旋转,就把这个问题补偿掉了; + 而承载笔记本电脑的铁板是近似水平的,它也只能在铁板所在平面内旋转,这样旋转并不能补偿这个倾斜。 + 我只能用卖家送的垫片把铁板下面一半的螺丝垫高,手动调平。 +* 做工比较差。铁板上镂空的地方没有磨边,有不知道是切割还是铣出来的边上的毛刺。 + +总之是觉得这个支架不太行,但也没有不好到需要退货的地步。 +很多年前我买的显示器支架,只比这个贵十块钱,质量好很多。 + diff --git a/content/blog/helloworld.md b/content/blog/helloworld.md new file mode 100644 index 0000000..e68ba26 --- /dev/null +++ b/content/blog/helloworld.md @@ -0,0 +1,50 @@ +--- +title: Helloworld +date: 2024-08-24T20:13:59+08:00 +draft: false +summary: 为什么不问问神奇海螺呢? +--- + +helloworld + +# 一级标题 + +## 二级标题 + +### 三级标题 + +hello world! + +* 无序列表1 +* 无序列表2 +* 无序列表3 + +1. 有序列表1 +2. 有序列表2 +3. 有序列表3 + +> 这是一个引用 +> 写了两行 + +如果段与段之间 +没有空行 +会怎样? + +```c++ +#include +using namespace std; +int main() { + cout << "Hello, World!" << endl; + return 0; +} +``` + +这是一个行内代码`printf("Hello, World!\n");`,和行内公式 $E=mc^2$。 + +$$ +\int_{-\infty}^{+\infty} e^{-x^2} \dd x = \sqrt{\pi} +$$ + +**这是粗体文本**,*这是斜体文本*。 + +[这是一个链接](https://www.example.com) diff --git a/content/blog/originpro-subtract-baseline/1.png b/content/blog/originpro-subtract-baseline/1.png new file mode 100644 index 0000000..6f17a30 --- /dev/null +++ b/content/blog/originpro-subtract-baseline/1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08c52903689b90a744431e2083b4ae5825122d14c8a252c7fcd76915e1326551 +size 42446 diff --git a/content/blog/originpro-subtract-baseline/2.png b/content/blog/originpro-subtract-baseline/2.png new file mode 100644 index 0000000..28493da --- /dev/null +++ b/content/blog/originpro-subtract-baseline/2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6ce81b5ebc912b833a9680c207a432b63dd195492af95b16b0a59b3f8cb8f89 +size 9880 diff --git a/content/blog/originpro-subtract-baseline/3.png b/content/blog/originpro-subtract-baseline/3.png new file mode 100644 index 0000000..90a89e0 --- /dev/null +++ b/content/blog/originpro-subtract-baseline/3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec555d9ff07f1f85121fc7d8e37d83927162165277f5830d1c417f36f87f913b +size 5597 diff --git a/content/blog/originpro-subtract-baseline/index.md b/content/blog/originpro-subtract-baseline/index.md new file mode 100644 index 0000000..1c83dba --- /dev/null +++ b/content/blog/originpro-subtract-baseline/index.md @@ -0,0 +1,92 @@ +--- +title: 使用 OriginPro 减去基线 +date: 2024-09-17T14:58:25+08:00 +draft: false +--- + +让拉曼的小峰看得见。 + + + +# 为什么要减去基线? + +拉曼实验测出来的峰高度差别太大。将瑞丽散射的峰去掉,其余的峰(拉曼散射造成的峰)高度也往往差了几个数量级。 +这导致很难选择合适的比例尺来展示全图:即使主峰已经飞到了画面外面,小峰也还是很难识别出来。 + +一个思路是将结果取对数画图,但对于拉曼散射的结果,直接将数值取对数效果并不明显,因为有一个基底的光强,所有的峰都是叠加在这个基底之上的。 +这个基底的光强也许来自热噪音,也许来自环境光,也许是光谱仪 CCD 本身的残留电荷什么的,我们暂时不讨论这个基底是哪里来的。但总之,这个基底是存在的。 +比方说基底光强是 $100$,有个小峰光强是 $120$,主峰光强是 $1\times10^6$。 +不取对数的话,小峰肯定是看不到的。 +但即便取了对数之后,$\cfrac{\lg 120}{\lg{1\times10^6}} \approx 0.3465$,$\cfrac{\lg 100}{\lg{1\times10^6}} \approx 0.3333$, + 可以看到小峰和基底的对比度仍然很小,依然很难看到。 +而如果把基底值尽可能减去,比如说减去 $90$, + 那么 $\cfrac{\lg 30}{\lg{1\times10^6 - 90}} \approx 0.2462$,$\cfrac{\lg 10}{\lg{1\times10^6 - 90}} \approx 0.1667$, + 这时小峰和基底就有了明显的对比。 + +有时减去基线还有一个动机:有的样品中缺陷太多,直接得到的拉曼的结果中基线特别高(相对于主峰),往往还会有一个大大的凸起,整个图就不是水平的。 +这时候把基线减掉就能“掩盖”这个问题,让图更美观。 +我们的样品没有这个问题,减不减基线肉眼看到的结果完全没有区别,减去基线只是为了让取对数后小峰更明显。 + +# 怎么减去基线? + +不能简单地减去一个常数,一个线性函数也不行,因为基线不是平的。要人眼盯帧去一截截确定一个直线或者几次函数作为基线并手动写程序处理也是可行的。实际上去基线是一个非常普遍的操作,一些商业软件已经做了这个功能(比如 OriginPro),动动手指点点鼠标就行,草履虫都能学会。 + +我看的教程是[这个](https://www.bilibili.com/video/BV1NZ4y1B7Zz)。 +写这个文章的目的就是自己整理记录一下基本的过程和自己的经验,免得下次再去找教程。 + +## 简单去基线的步骤 + +* 先把数据丢掉 OriginPro 里,然后选中数据。似乎是每次只能处理一列 Y 数据,选中多列也只给你处理第一列。 +* 然后点分析,点 “Peaks and Baseline”,然后 “Peak Analyzer”,打开对话框,就会见到一个像是流程图一样的东西。 + ![OrignPro 打开减去基线的对话框](1.png) +* 选择“Subtract Baseline”,然后下一步。之后的基线模式选择“User Defined”,之后一般使用默认的二阶导数,再之后可以调整点的个数。按我的经验,默认的八个点足够用。 +* 再之后一路下一步,最后就会得到数据。在得到的数据中,X 也会被重复几遍,没什么用但是也无伤大雅。 + +然后就有一个啸问题,就是减去基线后的结果中会有负值,导致取对数后会出现许多“谷”(即非常接近于零的值取对数后会变成非常大的负值),甚至不取对数都会有一些小谷。 +原因是 OriginPro 选取拟合基线的点时选取得与谱线过于接近,甚至一些选到了峰上,导致减出来了负值。 + +## 仔细调整基线 + +我的解决办法是,在指定点的个数之后的那一步中,点 “Modify/Del”,手动调整一下各个点的位置。 +对于选取到峰上的点,把它挪到别的地方或者直接删掉。对于选取得基本正确的点,也把它往下挪动一点,使得基线与谱线之间至少有一个像素的距离。 +挪动的过程中用鼠标拖拉很难操作,可以用鼠标点击一下想挪动的点,再按键盘的方向键来微调。 +对于一些不关注的区域(例如,我的实验测得的拉曼谱中,靠近瑞丽散射的那一端有一个凸起,我们认为这个凸起是滤光片导致的误差), + 放任它保持负值就可以了。 + +这样的手动操作其实是不利于科学结果的复现的,但好像也暂时没有更好的办法。 +我个人觉得,既然人眼能看出来基线的位置,就应该存在一个算法能更合适地把这些点找出来 + (只不过这个算法可能会需要更多的参数,例如高度与半高宽的比例必须达到某个人为设定的阈值就认为是峰)。 +但我暂时不知道这样的现成程序。 + +最后的结果也可以手动再调整一下,用类似于 `Col(E)-Min(Col(E))+10` 来赋值一个新列,将整体向上或者向下平移一点。 +反应到对数的图上,就是抉择是把微小的变化放大(下移但不要产生负值),还是把乱七八糟的线条压扁使得看起来没那么乱(上移)。 + +总结就是大概分下面几步: + +* 软件自动寻找几个用于拟合基线的点。 +* 手动调整这几个点,把不合适的去掉或者换个位置。 +* 软件自动拟合基线,并减去。 +* 手动调整结果(可选)。 + +# 看个结果? + +下面第一张图是拉曼光谱直接得到的实验结果,第二张是处理之后。 +可以看到,在大概 $350 \mathrm{mm^{-1}}$ 附近,原本隐匿起来的一个小峰现在就特别明显。 + +![处理之前](2.png) +![处理之后](3.png) + +实际上这个峰还是挺大的,即使不减去基线,直接取对数也能看到;更精细的峰才需要减去基线处理。 +但这个图当时测得也比较粗糙,不适合去分析更精细的峰。当然这个就和这个主题无关了。 + +这个峰实际上对应于 4H-SiC 在 $\Gamma$ 点附近的一个振动模式。 +单纯从理论上来说(用群表示论分析这个振动对应的表示),这个振动不会导致 z 方向入射的光再拉曼散射到 z 方向。 +实际上它也确实比那些对称性允许的散射弱得多,但实验上测到还是有一点的。更具体的物理上的分析暂时不表。 + +# 局限性 + +这个方法画出来的图只是为了方便找小峰,方便自己和导师看。 +找到的小峰必须回到原图再去仔细确认,发论文的时候也别整这种图,因为减去基线再取对数的过程中显然很可能会人为造一些峰和谷出来。 +记不清是谁来着,拿个取了绝对值再取对数的图在组会上说,两条线上的两个峰之间有一定位移,这个位移有如何如何的物理意义。 +但其实在取绝对值再取对数之前,数值上整体变动一点点就会导致那个峰发生巨大的位移,对一个接近零的数值取对数就是会这样,很容易放大误差。 + diff --git a/content/blog/raman-representation/index.md b/content/blog/raman-representation/index.md new file mode 100644 index 0000000..76619eb --- /dev/null +++ b/content/blog/raman-representation/index.md @@ -0,0 +1,107 @@ +--- +title: 声子的拉曼活性与群表示 +date: 2024-10-03T18:15:44+08:00 +draft: false +summary: 一些群表示论的魔法罢了。 +--- + +每一个声子模式都属于某个群的某个表示。 +只要知道表示,不需要知道这个声子具体是怎么振的,就可以知道这个声子是否是拉曼活性的 + (当然,是否强到实验中可以看到,那是另外一回事)。 +这是怎么做到的呢? + +一些特征标表在列出各个表示对应的特征标后,还会列出各个表示对应的一些式子,例如 $x$ 或者 $xy$ 或者 $x^2-y^2$。 +网上的教程会告诉你:如果声子对应的表示对应的式子有二次项,那就是拉曼活性的;没有就不是。 +——这又是什么魔法? + +我翻烂了互联网也没找到这整个一串问题的完整解释。 +或许它藏在某个上世纪的教科书里(我看了其中一本,他也没写),因为初次思考起来太抽象,一旦想明白又太简单,并且即使想不明白直接用也太简单了, + 导致懂的人懒得解释,不懂的人就不懂了,于是出现了断代。 +我自己闷头想了一天算是想明白了,于是写到这里分享出来。 +其实想出来之后就很简单了,不知道为啥辣么大个互联网居然只有人提问没有人回答。 + +## 前置结论 + +首先说几个具体讨论问题前需要用到的前置结论。这些结论都是网上可以找到证明或者讨论的。 + +第一个结论是:**具有拉曼活性的声子就是使得电极化性(polarizability)变化的声子。** +也就是说,一个声子有拉曼活性,等价于: + +$$ + \pdv{\alpha}{R} \neq 0 +$$ + +其中 $\alpha$ 是极化性张量,$R$ 是振动模式对应的方向向量。$R$ 的长度是 $3n$,$n$ 是原胞中的原子数。 +这是微扰理论的一个结论, + 具体的讨论可以看[这里](https://chem.libretexts.org/Bookshelves/Physical_and_Theoretical_Chemistry_Textbook_Maps/Physical_Chemistry_(LibreTexts)/13%3A_Molecular_Spectroscopy/13.11%3A_Time-Dependent_Perturbation_Theory)。 +这里的证明中取的基是原本哈密顿量的本征态,但实际上这个限制是不必要的,你只要把结论中的结果再线性组合一下就能看出来一般的情况了。 + +注意有时讨论拉曼时,有的人用的是电极化率(electric susceptibility,$\chi$)而不是极化性。 +这两个物理量物理意义是一致的,但转换并不只是差一个常数,差的还挺多,具体你可以自己去看看。 +一定程度上来讲,电极化性往往用来描述“微观”系统,例如一个分子对外加电场的响应;而电极化率往往用来描述“宏观”系统,例如一个晶体对外加电场的响应。 +大多数讨论时使用的是电极化性,只有个别讨论使用电极化率。 +可能是因为,做化学的人往往更追求通俗易懂,所以会在网上大致讨论拉曼原理,这时使用电极化性; + 而做物理的人往往更追求严谨,但定量讨论拉曼散射要用到量子电磁等高深的理论,于是这些讨论就都藏到上个世纪的教科书里了。 +不过这个问题和这里要讨论的问题一分钱关系都没有,你只需要知道声子模式对应于某个对称的二阶张量[^1],并且这个对应关系是线性的就行了。 + +第二个结论是群表示论中的结论:**物理中许多对称矩阵与它对应的二次型的对称性一致。** +这里“二次型的对称性”是指,这个多项式作为一个函数时(自变量为三维向量),将群元素作用上去,它变化与否与对应的矩阵是一致的。 +特征标表中的式子,其实就是将群元素作用到三个空间中(包括一维齐次多项式,旋转,二维齐次多项式),支撑对应表示的子空间的基矢。 +或者说,特征标表中的二次齐次多项式,你也可以把它写成一个个对称矩阵,只是矩阵写起来没有多项式方便(一行就能写完),所以才写成多项式。 + +这里的“许多对称矩阵”是指,当将群元素 $p$ 作用到系统上后,矩阵 $A$ 变为 $p^{-1}Ap$ 或者 $pAp^{-1}$ 这种 $3\times3$ 的矩阵。 +极化性就是这样的矩阵。 +但并不是所有的矩阵都是这样的,例如如果将格矢(列向量)拼成一个矩阵来描述原胞的形状和大小,这个矩阵 $A$ 在作用 $p$ 后就变成 $pA$, + 所以就没有这个特点。 + +这个结论也蛮明显的,只要在矩阵左右都乘上同一个向量就得到对应的二次型了。 + +第三个结论还是群表示论中的结论:**如果一个群与一个线性映射对易,那么这个线性映射的值域要么是零,要么值域承载的表示是定义域上的表示的子表示。** + +这个结论可以这样理解:定义域可以分解成两个空间的直和,一个是核空间,一个是核的正交补空间。 +可以证明这两个空间都对群运算封闭(取一个群元素试一下就可以看到这个结论), + 并且把核空间去除掉后,剩下的映射就是双射,群在正交补空间上的表示和在值域上的表示一样。 +也就是说,群在定义域中的表示,去掉属于核空间的部分,就是在值域上的表示。 +万一整个都是核空间,那就去完了,也就是“值域是零”这个特殊情况。 + +有这三个前置结论就够了。 + +## 开始变魔法 + +关注于某个振动模式所属的表示对应的子空间,假定这个空间的维度是 $m$,也就是这个声子模式是 $m$ 重简并的(如果没有偶然简并的话)。 +这个子空间对群运算封闭。 + +这个子空间中每一个向量都会引起极化性的一个变化(可能是零,也可能不是),极化性的变化也组成了一个线性空间,它的维度是一定不超过 $m$。 +从振动模式所属的表示空间到极化性所在的线性空间的映射具有下面的性质: +* 这个变换是线性变换。 + 因为我们只考虑了极化性对原子位置的一次偏导,即可以近似将极化性看作一个超平面(而不是曲面), + 几个方向向量先线性组合再求偏导,等于求偏导后再线性组合。 +* 群元素的作用与这个变换互易。 + 因为等价的方向上,极化性的偏导数应该是一样的。 +所以它可以套用上面的第三个结论。 + +考虑群在值域中的表示长什么样子。可以分成三种情况: +* 值域是零,也就是说这一组声子模式不会导致极化性的变化。 +* 值域不是零但维度小于 $m$,也就是说值域中的表示是定义域中的表示中,扣掉某些表示(属于核空间)后的表示。 + 然而定义域的表示已经是不可约的,所以这种情况不会发生。 +* 值域的维度等于 $m$,也就是说值域和定义域的表示相同,是同一个不可约表示,这时就可以在特征标表中标出对应的二次型(即对应的对称矩阵)。 + 如果反过来,从特征标表推导拉曼活性的话,就是: + * 特征标表中这个表示没有齐次二次多项式,说明在对称矩阵组成的全空间中,根本不存在可以承载这个表示的子空间,也就是这第三种情况不会发生, + 只能是第一种情况(没有拉曼活性)。 + * 特征标表中这个表示有齐次二次多项式,说明在对称矩阵组成的全空间中,存在可以承载这个表示的子空间,也就是这第三种情况可能发生, + 也就是这个声子模式可能有拉曼活性。 + 这个“可能”的意思是说,如果确定点群时已经充分考虑了晶体的对称性,那么大概率这个声子是会导致极化性的变化的, + 就像扔一个针在地上,没有特殊原因的话,针大概率(但不是一定)会躺倒在地上而不是竖起来; + 但如果确定点群时漏了一些对称性,使用这个方法时就会判断错误 + (例如,对于 4H-SiC,如果忘记它有个螺旋轴而只用了 $C_{3v}$,那么就会把 $B_1$ 归结到 $A_1$ 中而误判断)。 + + +好了这就是证明了。是不是非常容易。这个玩意儿让我想了一天。 + +如果要考量红外活性,也是类似的思路,只不过红外活性对应的是电偶极矩(或者电极化强度,总之是一个向量而不是张量)。 +从振动模式到电偶极矩的映射也是线性且与群元素互易的,所以包含一次齐次多项式的表示都是红外活性的。 + +[^1]: 准确说,是一个厄米的二阶三维张量。 + 声子引起的 $\delta \chi$ 或者 $\delta \alpha$ 并不是厄米的, + 但拉曼散射强度实际上是正比于 $\langle i | \delta\chi^\dagger\delta\chi | i\rangle$, + 而 $\delta\chi^\dagger\delta\chi$ 是厄米的;或者说,如果是实数的话,就是对称的。 diff --git a/content/blog/share-home-over-nfs/index.md b/content/blog/share-home-over-nfs/index.md new file mode 100644 index 0000000..2e54c93 --- /dev/null +++ b/content/blog/share-home-over-nfs/index.md @@ -0,0 +1,114 @@ +--- +title: 使用 NFS 共享家目录 +date: 2024-09-17T22:08:11+08:00 +draft: false +summary: 我家还蛮大的,算完了直接丢那儿,没问题的。 +--- + +# 起因 + +在集群上做科学计算时,需要在各个节点之间同步一些文件,例如计算用到的输入文件和计算结果。 +虽然 [Slurm](https://slurm.schedmd.com/quickstart.html) 也有诸如 `sbcast` 可以在节点之间复制文件, + 但这个方案我并没有见过谁使用。 +你只要想一下这个问题:复制过去的文件是否要在作业后删除?如果要,在什么时机删除?如何让它避免删除别的作业或者诸如 `.zshrc` 之类的文件? +你就会发现这种在节点之间复制文件的方案的使用前提是, + 要么使用者自己能理解集群是如何工作的,并且有良好的使用习惯,并且熟悉 linux 的操作,自己去主动维护集群的健康; + 要么管理者需要是全职的,能够随时处理这些问题,或者对鸡脚旮旯的细节行为有足够的了解,去设计一个自动化的解决方案。 + 总之,很难行得通。 +所以最好的办法就是把用户的家目录共享给各个节点。 +Windows 电脑大家都用过,共享之后的家目录对于用户来说就和单台的 Windows 电脑没有太大的区别,完全没有操作门槛。 + +之所以使用 NFS 而不是更专业的文件系统来共享,是因为我要处理的集群只有四个节点,而且只有千兆网互联 + (有万兆网卡,但不知为什么没有配置光纤一直闲置着)。 +NFS 应该足够用了。 + +# 遇到了什么坑? + +关于 NixOS 特有的问题(例如 home-manager 和 impermanence)这里不讨论,实际上这些问题都可以预先想到并且想好解决方案。 +这里只讨论一些与发行版无关并且不太容易预料到的问题。 + +## 挂载 NFS 的目录 + +和 sshfs 不同,NFS 必须先指定一个根目录(不同于系统的根目录,而是暴露给其它节点的根目录,使用 `fsid=0` 指定) + ,然后指定要导出的目录(即 `/home`)。 +在客户端,指定的目录是相对于这个根目录的,而不是系统的根目录。 + +举例来说,如果我在服务端指定导出: + +``` +/home 192.168.178.0/24(fsid=0) +/home/chn 192.168.178.0/24() +``` + +在客户端要挂载 `/home/chn`,需要写成: + +``` +192.168.178.1:/chn +``` + +最终我导出的是: + +``` +/ 192.168.178.0/24(rw,no_root_squash,fsid=0,sync,crossmnt) +/home 192.168.178.0/24(rw,no_root_squash,sync,crossmnt) +``` + +其中 `rw` 选项是因为默认 `ro`,我当然要 `rw`。`sync` 是因为 NFS 默认不会及时地向下层文件系统传递 sync 命令,我觉得还是传过去比较好。 +关于其它选项,以及它的安全性,稍后会介绍。 + +### `no_root_squash` 选项 + +NFS 默认会把 `root` 用户的权限映射为 `nobody`。 +这会导致一个初看起来很无厘头的问题:我在客户端用 `root` 居然 `cd` 不到 `/home/chn`,说我权限不够;用 `chn` 却没什么问题。 +需要加上 `no_root_squash` 才会恢复更直觉的行为。 + +按照文档的说法,这个是为了避免轻易地被设置带 suid 的文件。 +比如我有某个节点上的 root 权限和另外一个节点上的普通用户权限,我就可以在前者上设置一个带 suid 的文件丢到共享目录里, + 然后在后者上执行这个文件,就可以获得 root 权限。 +但是我觉得这个问题不是问题,一方面即使限制了 root 其它用户也可以设置所有者为其它用户的 suid 文件。 +况且如果黑客都能在某个节点上拿到 root 权限了,那说明这个集群已经被打成筛子了,还有什么保护的必要吗。 + +### `crossmnt` 选项 + +在 NixOS 上使用 impermanence 后会导致大量的很多层的挂载。 +例如 `/` 是 bind mount 自 `/nix/rootfs/current`, + 但 `/home/chn/Desktop` 是 bind mount 自 `/nix/persistent/home/chn/Desktop`。 +其它发行版可能因为挂载行为没有这样复杂所以不太会遇到这个问题。 + +默认情况下,NFS 的表现行为类似于 `bind` 而不是 `rbind`,也即如果我在 NFS 客户端所在节点上的 `/home/chn/Desktop` 创建一个文件, + 这个文件会出现在 NFS 服务端的 `/nix/rootfs/current/home/chn/Desktop`, + 而不是 `/nix/persistent/home/chn/Desktop` 和 `/home/chn/Desktop`。 +这个选项会让 NFS 表现得像 `rbind`,也即 bind mount 的目录也会被导出。 + +### 安全性 + +集群的网络我是这样配置的:其中一个节点插一根网线到路由器(可以上网),一根网线到一个交换机;其它节点都只插一个网线到这个交换机。 +这样把内部的网络和外部的网络隔离开来,在内部网络上就可以“为所欲为”了(比如跑 NFS)。 + +按照上面的 NFS 的配置,任何能走进这个实验室并在交换机上插一个网线的人都可以随意读写任何一个文件,或者获得任何一个节点的 root 权限。 +这个问题看起来很严重,但我觉得单纯地这个问题就也还好:他都可以走进这个实验室了,为什么不能物理地把硬盘拔下来读写呢? +如果一定要给 NFS 加认证的话,我觉得套个 wireguard 是可以的,但是不知道会不会有性能问题。 +况且物理接触到交换机还是比较难的,感觉没必要折腾。 + +我有点担心的是另外一些可能和这里产生联动的网络设置。 +比如,为了做 nginx 在三层协议的透明代理,我其实允许了一个不太安全的路由 `net.ipv4.conf.all.route_localnet`。 +这些设置会不会导致他在门口蹭到 WiFi 就可以访问 NFS,我暂时觉得不能,但是也不太确定。 +这里需要的专业知识太多,说不准哪里会出问题。 +诸如 `net.ipv4.conf.all.route_localnet` 这种不太常见但我需要的网络设置,我初期写 NixOS 的配置的时候并没有把它拆分到特定的服务里 + (即,不论是否开 nginx 都会设置这个)。 +诸如此类的设置叠加起来会不会真的导致安全问题,以我的三脚猫功夫不太能打包票。 + +## 在 initrd 中联网 + +我需要在 initrd 中配置好网卡(固定 IP),以在 switch root 之前挂载好 home,避免之后出现什么 race condition。 +如果你搜索互联网,会发现有许多文章提到有个 `ip=xxxx` 的内核参数。 +它确实会对网络配置产生影响,但影响是会导致配置的 systemd-networkd 全部失效,按照 `ip` 参数的配置来配置网络。 +我之前在别的模块里配置了 `ip=on`,导致 systemd-networkd 配置的静态地址不生效。 +实际上完全不写这个参数,只要在 initrd 里启用了 systemd-networkd,就可以在 initrd 使用网络。 +在 initrd 里配置 systemd-networkd 的方法和 switch root 之后基本一样。 + +## 在 initrd 中挂载 NFS + +有两个点与其它文件系统不同:一个是挂载 NFS 还需要用户态的程序支持,一个是 NFS 不同版本的支持是不同的内核模块和用户态程序。 +总之就是两个内核模块 `nfs` 和 `nfsv4` (后者依赖前者),两个用户态程序 `mount.nfs` 和 `mount.nfs4`。 +我用的应该是 NFSv4,但我把这些都塞进 initrd 里了,能用。 diff --git a/content/contact.md b/content/contact.md new file mode 100644 index 0000000..59cae0f --- /dev/null +++ b/content/contact.md @@ -0,0 +1,17 @@ +--- +title: 联系我 +--- + +你好我叫陈浩南。与电影里的陈浩南不同的是,那个是假的,而我真的叫陈浩南。 + +下面是我公开的联系方式,你可以选自己喜欢用的来联系我,我都可以接受。 + +* Matrix: @chn:synapse.chn.moe +* Misskey / Fediverse:@chn@铜锣湾.chn.moe +* 邮箱:chn@chn.moe +* Telegram:chn_alpha +* QQ:897331845 +* 微信:pang12318 + +如果你和我之前联系过,也可以直接打我的手机号或者发短信,时效性应该最好。 +只要打电话过来的不是我的导师 or 直属上级,我都不会紧张的。 diff --git a/content/docs/_index.md b/content/docs/_index.md new file mode 100644 index 0000000..2064209 --- /dev/null +++ b/content/docs/_index.md @@ -0,0 +1,9 @@ +--- +linkTitle: "Documentation" +title: Documentation +--- + +{{< callout emoji="​🏗️" >}} 施工中 {{< /callout >}} + +doc + diff --git a/content/docs/server/_index.md b/content/docs/server/_index.md new file mode 100644 index 0000000..9054279 --- /dev/null +++ b/content/docs/server/_index.md @@ -0,0 +1,24 @@ +--- +weight: 1 +title: "使用服务器" +--- + +初次使用,可以看这里: + +{{< cards >}} + {{< card link="start" title="快速开始" subtitle="没有废话,只有必要的操作步骤" icon="rocket" >}} +{{< /cards >}} + +或者,选择下面的主题深入了解: + +{{< cards >}} + {{< card link="config" title="服务器配置" subtitle="了解服务器的硬件配置和连接参数,选择合适的服务器" icon="server" >}} + {{< card + link="link" title="连接到服务器" icon="connect" + subtitle="在 Windows 上设置 WinSCP 和 PuTTY,或使用其它支持的连接方式" + >}} + {{< card title="使用 Linux" subtitle="Linux 上常见的概念和最常用的命令(咕咕咕)" icon="terminal" >}} + {{< card link="job" title="使用队列系统" subtitle="提交任务、查看任务详情、取消任务等" icon="queue" >}} + {{< card link="qa" title="Q & A" subtitle="常见问题解答" icon="question-mark-circle" >}} + {{< card link="stat" title="厦大超算(jykang)使用统计" icon="chart-bar" >}} +{{< /cards >}} diff --git a/content/docs/server/config.md b/content/docs/server/config.md new file mode 100644 index 0000000..8c5d8bf --- /dev/null +++ b/content/docs/server/config.md @@ -0,0 +1,139 @@ +--- +weight: 2 +title: "服务器配置" +--- + +## 基本情况 + +下面列出服务器放置的位置和主要用途,方便读者区分。当然主要用途之外也可以有“次要用途”,只要不影响他人。 + +| 服务器 | 地址(物理意义上) | 操作系统 | 主要用途 | +|:-:|:-:|:-:|:-:| +| 厦大超算
(jykang) | 我也不知道
好像在嘉庚三地下室
反正这个肯定丢不了 | Linux CentOS | VASP(CPU) | +| srv1 | 物机大楼 351 隔间内机架上
很吵的那四台就是 | Linux NixOS | VASP(CPU) | +| srv1
(Windows) | 虚拟机
对应宿主为 srv1-node2
即从上往下数第三个节点 | Windows | FDTD Solutions | +| xmupc1 | 物机大楼457我桌子右边 | Linux NixOS | VASP(GPU) | +| xmupc2 | 物机大楼457我桌子右边 | Linux NixOS | VASP(GPU) | + +## 软件 + +待补充(VASP 打了哪些补丁,还有哪些计算软件等)。 + + + +## 连接协议和参数 + +以下总结了各个服务器支持的连接协议和对应的参数,留空即表明该服务器不支持该协议。如果不知道如何使用这些参数,参考[连接到服务器](../link)。 + +| 服务器 | 用户名 | SSH 地址 | SSH 端口 | RDP 地址 | SMB 地址[^3] | +|:-:|:-:|:-:|:-:|:-:|:-:| +| 厦大超算
(jykang) | `jykang` | `hpc.xmu.edu.cn`[^1] | `22` | | | +| srv1 | `GROUPIII-n` | `srv1.chn.moe` | `22` | `srv1.chn.moe:6211`[^2] | `srv1.chn.moe` | +| srv1(Windows) | `GROUPIII-n` | `srv1.chn.moe` | `6144` | `srv1.chn.moe` | +| xmupc1 | 姓名首字母(例如 `chn`) | `xmupc1.chn.moe` | `6007` | `xmupc1.chn.moe`[^2] | `xmupc1.chn.moe` | +| xmupc2 | 姓名首字母(例如 `chn`) | `xmupc2.chn.moe` | `6394` | `xmupc2.chn.moe:3390`[^2] | + +## 硬件配置 + +以下表格总结了各个服务器的硬件配置。 + +现在(2024 年)最好的笔记本 CPU(R9-7945HX)性能约为 125 GFLOPS,整机大约七千可以买到,可以据此估计各个服务器的 CPU/GPU 性能。 + +{{< tabs items="厦大超算(jykang),srv1,srv1(Windows),xmupc1 & xmupc2" >}} + {{< tab >}} + 这里仅列出 jykang 有权限使用的节点。信息采集于 2024 年 10 月 21 日,可能有变化。 + + | 节点组 | 单节点CPU | 单节点理论性能
(GFLOPS) | 单节点内存 | + |:-:|:-:|:-:|:-:| + | `cnodes` | 双路 Intel E5-2690
共 16 核 32 线程
限制使用 20 线程 | 29 | `c00{1..9}`: 约 60 GB
`c0{19..44}`: 约 30 GB
`c0{45..48}`: 251.7 GB | + | `normal_1day`
`normal_1week` | 双路 Intel E5-2680 v4
共 28 核 | 93 | 124.9 GB | + | `b_node` | 双路 Intel 5318Y
共 48 核 | 167 | 251.3 GB | + | `charge_s_normal`
`hd_sd530` | 双路 Intel 6126
共 24 核 | 79 | `charge_s_normal`: 约 180 GB
`hd0{01..27}`: 125.2 GB
`hd028`: 93.7 GB | + | `hd_sd530_6226R` | 双路 Intel 6226R
共 32 核 | 129 | 188.2 GB | + + {{< /tab >}} + {{< tab >}} + 此集群包含了四个节点。其中第一个节点(srv1-node0)的性能较好,推荐优先使用;剩下的三个节点性能相对较差。 + 用于存储计算数据的硬盘大小为 1 TB,使用 [btrfs](../qa#btrfs-是什么),实际可存储数据大约 2.5 TB。 + + | 节点主机名
(Slurm 中的节点名) | 内存 | CPU | CPU 理论性能
(GFLOPS) | + |:-:|:-:|:-:|:-:| + | srv1-node0
(n0) | 128 GB | 四路 Intel Gold 6230
共 80 核 160 线程 | 250 | + | srv1-node1
(n1) | 32 GB | 四路 Intel E7-4809v4
共 32 核 64 线程 | 146 | + | srv1-node2
(n2) | 64 GB | 四路 Intel E7-4809v4
共 32 核 64 线程 | 146 | + | srv1-node3
(n3) | 40 GB | 四路 Intel E7-4809v4
共 32 核 64 线程 | 146 | + + 注:谨慎使用第三个节点(srv1-node2)做计算。详见下方的说明。 + + {{< details title="谨慎使用第三个节点的原因" closed="true" >}} + 按照吴志明老师的要求,此节点还安装了一个 Windows 虚拟机用于 FDTD Solutions(即srv1(Windows))。 + 同时使用 Windows 虚拟机和宿主机做计算会严重影响性能,占用内存过高还有可能会导致节点崩溃,你的任务就白算了(倒是也没有什么更严重后果)。 + 如果你不知道这段时间内有没有人在使用 Windows 虚拟机,建议干脆不要使用这个节点。 + {{< /details >}} + {{< /tab >}} + {{< tab >}} + 用于存储计算数据的硬盘空间约 500 GB。 + + | 内存 | CPU | CPU理论性能
(GFLOPS) | + |:-:|:-:|:-:| + | 128 GB | 四路 Intel E7-4809v4
共 32 核 32 线程 | 146 | + {{< /tab >}} + {{< tab >}} + 对于大多数任务,推荐使用 GPU 进行计算,因为算得快;对于需要较多内存的任务,因为 GPU 的显存不够用,推荐使用 CPU。 + + xmupc1 用于存储计算数据的硬盘大小为 2 TB,使用 [btrfs](../qa#btrfs-是什么),实际可存储数据大约 5 TB。 + xmupc2 用于存储计算数据的硬盘大小为 18 TB,使用 [btrfs](../qa#btrfs-是什么),实际可存储数据大约 40 TB。 + + | 主机 | 设备 | 理论性能
(GFLOPS,双精度/单精度) | 内存/显存 | + |:-:|:-:|:-:|:-:| + | xmupc1 | CPU: AMD R9-5950X
16 核 32 线程 | 100/100 | 96 GB | + | xmupc1 | GPU: NVIDIA 4090 | 1290/82580 | 24 GB | + | xmupc1 | GPU: NVIDIA 3090 | 556/35580 | 24 GB | + | xmupc1 | GPU: NVIDIA P5000 | 194/6197 | 16 GB | + | xmupc2 | CPU: 双路 Intel Gold 6152
共 44 核 88 线程 | 136/136 | 256 GB | + | xmupc2 | GPU: NVIDIA 4090 | 1290/82580 | 24 GB | + | | GPU: NVIDIA 2080 Ti
(买了没装) | 421/13448 | 12 GB | + | | ~~GPU: NVIDIA H100
(未付款,期待发货)~~ | 25600/51200 | 80 GB | + + 注:VASP 使用双精度浮点(即双精度的 GFLOPS 更能估计 VASP 的实际性能)。 + 一些其它的软件可能使用单精度浮点(例如 LAMMPS)也可能使用双精度浮点。 + 深度学习、游戏渲染时,一般使用单精度或者半精度浮点。 + {{< /tab >}} +{{< /tabs >}} + +## 队列 + +一些服务器包含多个队列。 + +{{< tabs items="厦大超算(jykang),srv1" >}} + {{< tab >}} + 信息采集于 2024 年 10 月 21 日,可能有变化。 + + | 队列 | 时间限制 | 节点组 | 节点 | + |:-:|:-:|:-:|:-:| + | `normal`(默认) | 14 天 | `cnodes` | `c00{1..9}` `c0{19..48}`
以下除外:`c022` + | `normal_1day` | 1 天 | `normal_1day` | `nxt00{1..9}` `nxt0{41..67}`
以下除外:`nxt043` | + | `normal_1week` | 7 天 | `normal_1week` | `nxt0{10..40}`
以下除外:`nxt015` | + | `normal_2week` | 14 天 | `b_node` | `b0{01..14}` | + | `normal_1day_new` | 1 天 | `charge_s_normal` | `s0{06..18}` | + | `ocean_530_1day` | 1 天 | `hd_sd530` | `hd0{01..28}` | + | `ocean6226R_1day` | 1 天 | `hd_sd530_6226R` | `hd0{29..48}` | + {{< /tab >}} + {{< tab >}} + | 队列 | 包含节点 | + |:-:|:-:| + | `localhost`(默认) | `n0` | + | `old` | `n1` `n3` | + | `fdtd` | `n2` | + | `all` | `n[0-3]` | + + {{< /tab >}} +{{< /tabs >}} + +[^1]: 使用厦大超算(jykang)时,必须开启 SSH agent forwarding, + 详见[连接 VASP 服务器,开启 SSH 代理转发](../link#连接-vasp-服务器开启-ssh-代理转发)或[使用 OpenSSH](../link#使用-openssh)。 +[^2]: 使用 RDP 协议连接到 Linux 服务器时,需要手动设置连接类型,详见:[RDP 设置连接类型](../qa#rdp-设置连接类型)。 + 当使用 Linux 系统连接到 Linux 服务器时,推荐使用 SSH X11 forwarding 代替远程桌面。 + 详见:[使用 SSH X11 forwarding](../qa#使用-ssh-x11-forwarding)。 +[^3]: SMB 协议使用与 RDP 或 SSH 不同的认证机制,与 SSH 和 RDP 不共用密码,使用前需要先联系我设置一个。 + 此外 SMB 协议安全性可能不及其它两者。 diff --git a/content/docs/server/job.md b/content/docs/server/job.md new file mode 100644 index 0000000..2362e51 --- /dev/null +++ b/content/docs/server/job.md @@ -0,0 +1,193 @@ +--- +weight: 4 +title: "使用队列系统" +--- + +## 队列系统的作用 + +简而言之:排队。你告诉队列系统使用什么资源(例如多少核的 CPU)运行某个程序,轮到你的任务执行时,队列系统会按照你的要求执行任务。 +队列系统会考虑服务器的负载能力(不可以同时运行太多任务把服务器挤垮)、有多人使用服务器时公平分配资源,以及记录任务执行过程中的开销。 + +队列系统不与某个特定的计算软件(例如 VASP)绑定。 +也就是说,你可以脱离队列系统直接运行 VASP,也可以把别的软件也放到队列系统里运行,它们虽然经常在一起使用,但本质上是两个分离的概念。[^1] + +## 使用队列系统 + +队列系统与操作系统绑定很深。 + +* srv1:使用 [Slurm(新)](#slurm新)。 +* srv1(Windows):请阅读 [Windows](#windows) 章节,了解相关注意事项。 +* xmupc1 和 xmupc2:使用 [Slurm(旧)](#slurm旧)。 +* 厦大超算(jykang):使用 [LSF](#lsf)。 + +### Slurm(新) + +#### 使用图形界面快速开始 + +使用命令 `sbatch-tui` 或者 `sbatch` 不带任何参数,就可以看到一个图形界面[^3]。 +按照提示,鼠标点选对应按钮,即可提交任务。这可以满足一多半的需求。 + +以下用一些例子来进一步介绍如何使用 Slurm。更多细节请参考[官方文档](https://slurm.schedmd.com/)。 +例子中一些选项是可选的、一些是必写的,会详细说明。 + +#### 提交任务 + +使用 `sbatch` 提交任务。当加上参数时,会直接提交任务;当不加任何参数时,会调用 `sbatch-tui` 让你选。 + +提交一个 VASP(CPU)任务的例子: + +```bash +sbatch --ntasks=2 --cpus-per-task=4 --hint=nomultithread --job-name="my great job" --output=output.txt --queue=localhost --export=ALL,OMP_NUM_THREADS=4,OMP_STACKSIZE=512m --nodes=1-1 --mem=28G --wrap="vasp-intel srun --mpi=pmix vasp-std" +``` + +* `--ntasks=2 --cpus-per-task=4` 两者的乘积指定使用多少 CPU 核[^5],必写。 + 同样是占用 9 个核,`--ntasks=3 --cpus-per-task=3` 和 `--ntasks=9 --cpus-per-task=1` 性能并不相同。 + 此外,当 `--cpus-per-task` 不为 `1` 时,VASP 的 `NCORE` 等参数也与这里的参数耦合[^9]。 + 可以照抄下面的设置,或者自己尝试一下如何设置性能更好[^15]: + * 对于 xmupc1:`--ntasks=3 --cpus-per-task=4`。 + * 对于 xmupc2:`--ntasks=4 --cpus-per-task=10`。 + * 对于 srv1 的默认队列:`--cpus-per-task=10`,`--ntasks=8` 或按需设置。 + * 对于 srv1 的其它队列:`--ntasks=4 --cpus-per-task=8`。 +* `--hint=nomultithread` 对于大多软件(包括 VASP)都需要写[^6],不写不会出错但会比较慢。 +* `--job-name=xxx` 指定任务的名字,可以不写。 +* `--queue=xxx` 指定队列的名字,不写时使用默认队列。 +* `--export=ALL,OMP_NUM_THREADS=4,OMP_STACKSIZE=512m` 指定环境变量。完全不写这个参数时,相当于 `--export=ALL`。 + * `ALL` 表示使用当前环境中的所有变量,并额外设置后面追加的值; + * `OMP_NUM_THREADS=4` 表示设置 OpenMP 的线程数为 4。 + 对于使用 OPENMP 并行的程序(包括 VASP(CPU),但不包括 VASP(GPU)),`OMP_NUM_THREADS` 必须设置为与 `--cpus-per-task` 相同的值; + 即使没有设置 `--cpus-per-task`,也需要设置 `OMP_NUM_THREADS=1`。 + * `OMP_STACKSIZE` 设置每个 OpenMP 线程的栈大小,需要足够大,VASP 文档推荐设置为 `512m`,通常已经足够。 + 如果遇到段错误(Segmentation fault),可以尝试增大这个值。 +* `--nodes=1-1` 强制所有任务分配到一个节点上(即不跨节点运行),推荐在大多情况下使用[^11]。 + 若要跨节点并行,并且节点 CPU/GPU 相同,不写这个参数就可以。 + 当要跨的节点的 CPU/GPU 型号不同时,还有别的注意事项,详见[这里](../qa#混合使用不同型号的节点)。 +* `--mem=28G` 指定只使用内存大于等于 28 G 的节点,不设置则没有这个限制。 + 由于 Slurm 看到的内存大小比物理内存小一些[^14](例如 32 G 内存的节点,Slurm 可能会认为它只有 31.5 G),因此指定时也需要略小一些。 +* `--wrap="vasp-intel srun --mpi=pmix vasp-std"` 指调用 std 版本的 VASP[^7]。 + 要使用 gam 或 ncl 版本,将最后的 `vasp-std` 改为 `vasp-gam` 或 `vasp-ncl`。 + +以下是一个提交 VASP(GPU)任务的例子(这个例子适用于旧的打包方式,会在下次服务器维护后更改): + +```bash +sbatch --gpus=1 --ntasks-per-gpu=1 --nodes=1-1 --job-name="my great job" --output=output.txt vasp-nvidia-std +``` + +* `--gpus` 指定使用哪个 GPU: + * 要占用任意一个 GPU(排到这个任务时哪个空闲就使用哪个),写 `--gpus=1`。要占用任意两个就写 `--gpus=2`,以此类推。 + 对于 VASP,单个任务不要占用超过一个 GPU,是多个显卡的速度会比单个更慢(因为显卡之间的通信速度会是瓶颈)[^12]。 + * 要指定具体使用哪一个 GPU 时,写 `--gpus=4090:1`。2080 Ti 需要写为 `2080_ti`,P5000 需要写为 `p5000`。 + * 当需要使用多个不同型号的 GPU 时(例如,指定使用一个 3090 和一个 4090 ),写 `--gres=gpu:3090:1,gpu:4090:1`。 +* `--ntasks-per-gpu=1` 对于 VASP(GPU)来说一定要写且只能设置为 `1`,对于其它任务(例如 LAMMPS)可以适当修改。[^4] +* `--cpus-per-task` 对于 VASP(GPU)来说通常不用指定[^13],其它程序可能需要。这个选项的具体含义参考上一个例子。 +* `vasp-nvidia-std` 即要执行的程序[^7],要使用 gam 或 ncl 版本时,写为例如 `vasp-nvidia-gam`。 + +要把其它程序提交到队列里,也是类似的写法。请自行举一反三。 + +#### 查看任务 + +要列出正在等待和正在运行的任务: + +```bash +squeue -l +``` + +要列出已经提交(包括已经完成、取消、失败)的任务: + +```bash +squeue -t all -l +``` + +要显示还没有完成的任务的详细信息,或刚刚完成的任务的详细信息: + +```bash +scontrol show job 114514 +``` + +要在数据库中查找某一段时间内(例如 2024 年 8 月)提交的所有任务的详细信息[^10]: + +```bash +sacct --units M --format=ALL --starttime 2024-08-01T00:00:00 --endtime 2024-09-01T00:00:00 | bat -S +``` + +#### 调整和取消任务 + +取消一个任务: + +```bash +# 按任务的 id 取消 +scancel 114514 +# 按任务的名字取消 +scancel -n my_great_job +# 取消一个用户的所有任务 +scancel -u chn +``` + +如果自己已经提交了许多任务,现在想要把一个任务调整到自己的其它任务前面(不会影响整体的优先级),可以使用: + +```bash +scontrol top 114514 +``` + +要无条件将一个任务优先级设置为最高或最低(需要管理员权限): + +```bash +# 最高 +sudo scontrol update JobId=3337 Nice=-2147483645 +# 最低 +sudo scontrol update JobId=3337 Nice=2147483645 +``` + +### Slurm(旧) + +与 Slurm(新)基本相同,只是 VASP(CPU)的打包方式不同,使得提交任务的命令略有不同。 +下一次服务器维护时,xmupc1 和 xmupc2 计划合并为一个集群,并且应用新的打包方式。 + +提交 VASP(CPU)任务的例子: + +```bash +sbatch --ntasks=2 --cpus-per-task=4 --hint=nomultithread --job-name="my great job" --output=output.txt vasp-intel-std +``` + +### LSF + +待补充。 + +### Windows + +Windows 没有通用的队列系统程序,通常手动控制任务依次执行。~~我曾经在2024年暑假答应鹏岗帮他写一个,但事实是我把他鸽了,有空一定写,咕咕咕。~~ + +你可以使用 FDTD Solutions 自带的一个单用户的队列系统。 +在 FDTD Solutions 内的控制台使用 `addjob` 命令将要模拟的文件加入队列,然后它就会依次运行。 +文档见[这里](https://optics.ansys.com/hc/en-us/articles/360034410714-addjob-Script-command)。 + +{{< callout type="warning" >}} + 不要同时启动过多的计算任务。 +
+ 例如,如果一个任务需要一个小时跑完,那么按顺序运行两个任务需要两个小时,但是同时运行两个任务需要的时间往往远大于两个小时。 + 若同时运行 10 个任务,可能连系统都没有反应了。 +{{< /callout >}} + +{{% details title="一个简易的队列系统的实现" closed="true" %}} + 待补充 +{{% /details %}} + +[^1]: 实际上队列系统与要运行的软件还是有许多耦合的,尤其是使用 MPI 并行的程序(包括绝大多数成熟的大型科学计算软件)。 + 如何让队列系统与这些软件对接好有时会很麻烦,只是普通用户不需要关心(我替你们搞定了)。 +[^3]: 其实这个不能叫“图形用户界面(gui)”,应该叫“文本用户界面(tui)”。但后者会让不熟悉的人误解,所以这里还是叫“图形界面”。 +[^4]: 这个参数指定的通常是 MPI 进程数(为这个参数指定的数值乘以 GPU 数量),其实就是 `--ntasks` 的另外一种写法。 + VASP(GPU)限制每个 GPU 必须对应且只能对应一个 MPI 进程,不满足这个条件就会报错或者只使用 CPU 计算,因此只能用一个。 +[^5]: 通常来说,`--ntasks` 对应 MPI 进程数,`--cpus-per-task` 对应 OpenMP 线程数。 + 这个对应关系并不是一定的,比如你先请求 10 个 task,然后用 `srun` 运行 10 个不相关的程序也是可以的,这个过程中可以根本没有 MPI 和 OpenMP。 +[^6]: 这个选项用于忽略 CPU 的超线程,即认为物理核心和对应的虚拟核心总共算一个核心。 + Slurm 默认会把超线程核心和物理核各算成一个核,但做科学计算时一般要关掉超线程。 +[^7]: 使用 `--wrap` 参数和直接写在 `sbatch` 后面,都可以指定要运行的程序。 + 区别在于,后者必须是一个脚本(不能是二进制程序),并且在脚本里可以指定一些给 Slurm 看的参数。 +[^9]: 具体是如何耦合的,见[官方文档](https://www.vasp.at/wiki/index.php/Combining_MPI_and_OpenMP)。 +[^10]: 我不确定这里是否真的是任务的“提交时间”而不是“完成时间”或者别的什么时间,官方文档没有说清楚。 +[^11]: 跨节点并行可能会有比较大的损耗。我们的服务器都仅仅使用千兆网互联,比不上学校的超算,可能损耗更大。 +[^12]: 如果有 nvlink,或许就不会出现这种情况。 +[^13]: 按照经验,大多情况下,对于 VASP,一个 CPU 核心搭配一个显卡已经足够,增加核心数并不会更快。 + 少数情况下增加可能会有用,例如运行机器学习时(VASP 的机器学习使用纯 CPU 实现)。 +[^14]: 实际上是在 Slurm 的配置文件中手动指定的。具体每个节点指定了多少,见[系统配置文件](https://github.com/CHN-beta/nixos)。 +[^15]: 按照经验,OpenMP 线程数等于单个 CPU 或单个 ccx 的核心数或者核心数的一半时,性能最好。 +``` diff --git a/content/docs/server/link/_index.md b/content/docs/server/link/_index.md new file mode 100644 index 0000000..4984774 --- /dev/null +++ b/content/docs/server/link/_index.md @@ -0,0 +1,222 @@ +--- +weight: 3 +title: "连接到服务器" +--- + +关于“如何连接到服务器”,最常见的情况有两种: + +* 使用 FDTD Solutions 做计算时,通常是在 Windows 上,使用 Windows 自带的远程桌面,通过 RDP 协议,连接到远程服务器操作。 + 参考[连接 FDTD 服务器](#连接-fdtd-服务器)。 +* 使用 VASP 做计算时,通常是在 Windows 上,使用 WinSCP 和 PuTTY 这两个软件,通过 SSH 协议,连接到远程服务器操作。这可以进一步分为: + * 使用学校超算上的 jykang 用户时,使用密钥连接,并且需要在使用 SSH 协议连接时额外开启名为“SSH 代理转发”的功能。 + 参考[连接 VASP 服务器,开启 SSH 代理转发](#连接-vasp-服务器开启-ssh-代理转发)。 + * 吴志明老师的学生使用 srv1 时,使用密码连接,不使用“SSH 代理转发”(“SSH 代理转发”必须使用密钥才可能开启)。 + 参考[连接 VASP 服务器,使用密码](#连接-vasp-服务器使用密码)。 + * 其它情况,使用密钥连接,是否开启“SSH 代理转发”都可以连接(不开启时操作起来更简单,开启后可以方便服务器之间互相连接、对拷文件)。 + 参考[连接 VASP 服务器,不开启 SSH 代理转发](#连接-vasp-服务器不开启-ssh-代理转发)。 + +以下先分别介绍这四种最常见情况下的操作,再介绍其它不常用的内容。 + +## 四种最常见情况 + +### 连接 VASP 服务器,开启 SSH 代理转发 + +接下来介绍在 Windows 上,使用 WinSCP 和 PuTTY 这两个软件,使用密钥,通过 SSH 协议连接到远程服务器,并且开启“SSH 代理转发”的操作。 + +你需要做下面三件事情: +1. 启动 Pageant 并添加密钥。**每次登陆服务器前都需要做这个事情。** +2. 配置 PuTTY,使 PuTTY 在每次登陆时不直接使用密钥,而是利用 Pageant 完成认证。这一步骤只需要执行一次,之后打开 PuTTY 后不用重新配置。 +3. 配置 WinSCP,使 WinSCP 在每次登陆时不直接使用密钥,而是利用 Pageant 完成认证。这一步骤只需要执行一次,之后打开 WinSCP 后不用重新配置。 + +接下来将分别说明这三件事怎么做。 + +{{< details title="配置 Pageant" closed="true" >}} + 1. 找到 Pageant 程序
+ Pageant 会随着 PuTTY 一起安装,一般来说您可以直接在开始菜单中搜索“pageant”找到它,也可以在 PuTTY 的安装目录中找到它。 + ![](pageant3.png) + 2. 启动 Pageant
+ 启动后可能没有任何反应,也可能有一个黑框闪过,这是正常的。只要右下角的系统托盘中出现了 Pageant 的图标就可以了。 + ![](pageant1.png) + 3. 添加密钥
+ 双击 Pageant 图标,打开 Pageant 窗口。选择“Add Key”,然后选择您的密钥文件。 + ![](pageant2.png) + + {{< callout type="info" >}} + 无论是使用 WinSCP 还是 PuTTY,每次使用前,都需要如此启动 Pageant 并添加密钥。 + 如果您希望 Pageant 启动后自动添加密钥或开机时自动启动 Pageant,参见:[自动启动 Pageant 并添加密钥](../qa#自动启动-pageant-并添加密钥) + {{< /callout >}} +{{< /details >}} + +{{< details title="配置 PuTTY" closed="true" >}} + 1. 在 Session 中设置“Host Name (or IP address)”为服务器的地址和端口。 + 各个服务器的地址和端口请参考[连接协议和参数](../config#连接协议和参数)中的 SSH 协议部分。 + ![](putty5.png) + 2. 在 Connection->SSH->Auth,勾选“Attempt authentication using Pageant”和“Allow agent forwarding”。 + ![](putty1.png) + 3. 在 Connection->SSH->Auth->Credentials,清空“Private key file for authentication”。 + ![](putty2.png) + 4. (选做但推荐)在 Connection->Data中,将“Auto-login username”设置为用户名,这样每次登陆时就不需要手动输入用户名了。 + 各个服务器的用户名请参考[连接协议和参数](../config#连接协议和参数)。 + 5. 回到Session,在“Saved Sessions”中输入任意一个名字(例如 `jykang`)并点击“Save”,以保存配置。之后双击这个配置文件的名字即可登陆。 + ![](putty4.png) +{{< /details >}} + +{{< details title="配置 WinSCP" closed="true" >}} + 1. 在登陆界面,点击“新建站点”。 + 设置“文件协议”为 `SCP`,“主机名”(即地址)、“端口号”、“用户名”参考[连接协议和参数](../config#连接协议和参数)中的SSH协议部分,密码为空。 + 然后点击右下角“高级”继续修改设置。 + ![](winscp3.png) + {{< callout type="info" >}} + 文件协议设置为 `SFTP` 大多功能也可以使用,但相比于 SCP 协议,SFTP 可用的功能较少(例如不能远程复制)。因此建议使用 SCP。 + {{< /callout >}} + 2. 在 SSH->Authentication,勾选“使用 Pageant 进行认证”,勾选“允许代理转发”,清空“密钥文件”,然后点击“确定”,再点击“保存”。 + ![](winscp1.png) + 3. (选做)如果您需要通过 WinSCP 打开 PuTTY 的话,需要在 WinSCP 主界面->工具->选项->集成->应用程序路径中, + 在原来的基础上增加 `-A` 参数。 + ![](winscp2.png) + {{< callout type="info" >}} + 如果难以直接在文本框中修改,就把它复制到记事本里修改,然后再复制回去。 + {{< /callout >}} +{{< /details >}} + +{{< callout type="info" >}} + 如果您确认已经按照教程设置好了却仍然不能连接,可以尝试将 WinSCP 和 PuTTY 都更新到最新。已知非常旧的版本在设置过程中会出现问题。 + 我测试使用的版本是:PuTTY 0.78 和 WinSCP 6.3.3。 +{{< /callout >}} + +### 连接 VASP 服务器,不开启 SSH 代理转发 + +接下来介绍在 Windows 上,使用 WinSCP 和 PuTTY 这两个软件,使用密钥,通过 SSH 协议连接到远程服务器,并且不开启“SSH 代理转发”的操作。 + +{{< details title="配置 PuTTY" closed="true" >}} + 1. 在 Session 中设置“Host Name (or IP address)”和“Port”为对应服务器的地址和端口。 + 参考[服务器配置](../config#连接协议和参数)中的 SSH 协议部分。 + ![](putty5.png) + 2. 在 Connection->SSH->Auth->Credentials,在“Private key file for authentication”中选择自己密钥文件。 + 如果之后把密钥文件移动到了别的地方,需要在这里重新选择。 + ![](putty6.png) + 3. (选做但推荐)在 Connection->Data中,将“Auto-login username”设置为自己的用户名,这样每次登陆时就不需要手动输入用户名了。 + 用户名参考[服务器配置](../config#连接协议和参数)。 + 4. 回到 Session,在“Saved Sessions”中输入任意一个名字(例如 `jykang`)并点击“Save”,以保存配置。之后双击这个配置文件的名字即可登陆。 + ![](putty4.png) +{{< /details >}} + +{{< details title="配置 WinSCP" closed="true" >}} + 1. 在登陆界面,点击“新建站点”。 + 设置“文件协议”为 `SCP`,“主机名”(即地址)、“端口号”、“用户名”参考[服务器配置](../config#连接协议和参数)中的 SSH 协议部分,密码为空。 + 然后点击右下角“高级”继续修改设置。 + ![](winscp3.png) + {{< callout type="info" >}} + 文件协议设置为 `SFTP` 大多功能也可以使用,但相比于 SCP 协议,SFTP 可用的功能较少(例如不能远程复制)。因此建议使用 SCP。 + {{< /callout >}} + 2. 在 SSH->Authentication,选择“密钥文件”,然后点击“确定”,再点击“保存”。如果之后把密钥文件移动到了别的地方,需要在这里重新选择。 + ![](winscp4.png) +{{< /details >}} + +### 连接 VASP 服务器,使用密码 + +接下来介绍在 Windows 上,使用 WinSCP 和 PuTTY 这两个软件,使用密码,通过 SSH 协议连接到远程服务器。 + +{{< details title="配置 PuTTY" closed="true" >}} + 1. 在 Session 中设置“Host Name (or IP address)”和“Port”为对应服务器的地址和端口。 + 参考[服务器配置](../config#连接协议和参数)中的SSH协议部分。 + ![](putty5.png) + 2. (选做但推荐)在 Connection->Data中,将“Auto-login username”设置为自己的用户名,这样每次登陆时就不需要手动输入用户名了。 + 用户名参考[服务器配置](../config#连接协议和参数)中的SSH协议部分。 + 3. 回到 Session,在“Saved Sessions”中输入任意一个名字(例如 `jykang`)并点击“Save”,以保存配置。之后双击这个配置文件的名字即可登陆。 + 输入密码的过程中,屏幕上既不会显示密码也不会显示星号,这是正常的,把密码输完回车就行。 + ![](putty4.png) +{{< /details >}} + +{{< details title="配置 WinSCP" closed="true" >}} + 在登陆界面,点击“新建站点”。 + 设置“文件协议”为 `SCP`,“主机名”(即地址)、“端口号”、“用户名”参考[服务器配置](../config#连接协议和参数)中的 SSH 协议部分,并填入密码。 + 再点击“保存”。 + ![](winscp3.png) + {{< callout type="info" >}} + 文件协议设置为 `SFTP` 大多功能也可以使用,但相比于 SCP 协议,SFTP 可用的功能较少(例如不能远程复制)。因此建议使用 SCP。 + {{< /callout >}} +{{< /details >}} + +### 连接 FDTD 服务器 + +接下来介绍在 Windows 上,使用 Windows 自带的远程桌面客户端,通过 RDP 协议,连接到 Windows 远程服务器的操作。 +其它使用 RDP 连接的方法参考[使用 RDP 远程桌面](#使用-rdp-远程桌面)。 + +{{< details title="配置 Windows 自带远程桌面" closed="true" >}} +1. 在开始菜单中搜索“远程”,打开“远程桌面连接”。 + ![](rdp1.png) +1. 在“计算机”中输入服务器地址,然后点击“连接”。服务器地址参考[连接协议和参数](../config#连接协议和参数)中的 RDP 协议部分。 + ![](rdp2.png) +2. (选做)打开“显示选项”,填入用户名,之后就不需要每次输入了。 +{{< /details >}} + +## 其它内容 + +### 使用 OpenSSH + +支持 SSH 协议的有好多好多客户端(不论命令行还是图形界面),最常用的是 OpenSSH。 +现在的系统大概已经自带了 OpenSSH 客户端,所以可以直接在命令行中使用。 + +连接到服务器的命令是: + +```bash +ssh -p 端口 用户名@服务器地址 +``` + +要传输文件,可以使用 `scp`: + +```bash +# 上传文件 +scp -rP 端口 本地路径 用户名@服务器地址:远程路径 +# 下载文件 +scp -rP 端口 用户名@服务器地址:远程路径 本地路径 +``` + +传输文件时如果要断点续传,可以使用 `rsync`: + +```bash +# 下载 +rsync -rlP -e "ssh -p 端口" 用户名@服务器地址:远程路径 本地路径 +# 端口为 22 时可以省略一些参数 +rsync -rlP 用户名@服务器地址:远程路径 本地路径 +# 上传就是反过来 +rsync -rlP -e "ssh -p 端口" 本地路径 用户名@服务器地址:远程路径 +``` + +要使用 SSH agent forwarding,稍微麻烦一点。 + +1. 在本地运行一个 SSH agent,并导出对应的环境变量:`eval $(ssh-agent)` +2. 将要使用的密钥添加到 agent 中:`ssh-add 密钥文件` +3. 在连接服务器时把 agent 转发出去:`ssh -o ForwardAgent=yes -p 端口 用户名@服务器地址` + +后两步可以写到 `~/.ssh/config` 中来自动完成,例如: + +```conf +Host jykang + ForwardAgent yes + User jykang + HostName hpc.xmu.edu.cn + AddKeysToAgent yes +``` + +然后 `ssh jykang` 就可以了。 + + +### 使用 RDP 远程桌面 + +没什么好说的,草履虫都会用。 +只有一个事情:服务端为 Linux 时(无论客户端是什么),连接时需要手动设置连接类型为“LAN”,详见 [RDP 设置连接类型](../qa#rdp-设置连接类型)。 + +### 使用 SMB 协议 + +SMB 就是 Windows 共享文件夹或者共享打印机的那个协议,客户端和服务端通常会有另外一个名字叫“samba”。 + +主要优势是在 Windows 上使用方便: +* 可以直接在资源管理器中输入 `\\` 加上服务器地址访问,例如 `\\xmupc1.chn.moe`。 + 服务器地址参考[服务器配置](../config#连接协议和参数)中的 SMB 协议部分。 +* 也可以将它作为一个网络驱动器添加(地址同样是 `\\` 加上服务器地址)。 + +### 使用 SSH 在服务器之间建立连接 + +待补充。 diff --git a/content/docs/server/link/pageant1.png b/content/docs/server/link/pageant1.png new file mode 100644 index 0000000..8cee608 --- /dev/null +++ b/content/docs/server/link/pageant1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31a6f2844b602199c9195a2d3782c4aea7bbb9fb088c8d5d52a32641f34943ae +size 8510 diff --git a/content/docs/server/link/pageant2.png b/content/docs/server/link/pageant2.png new file mode 100644 index 0000000..2c1b0f1 --- /dev/null +++ b/content/docs/server/link/pageant2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c1f06fc061fc1922c442359b03457e5a1ae6342f735e0f1b1579ab99ee4fdb9 +size 223767 diff --git a/content/docs/server/link/pageant3.png b/content/docs/server/link/pageant3.png new file mode 100644 index 0000000..3fb3644 --- /dev/null +++ b/content/docs/server/link/pageant3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb7f20a94e017c53c4ab0d8b32320a465db2c7519fa219668bef22560ccc6b9b +size 29288 diff --git a/content/docs/server/link/putty1.png b/content/docs/server/link/putty1.png new file mode 100644 index 0000000..1dbc2be --- /dev/null +++ b/content/docs/server/link/putty1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e989b96dfd6504f111a437e66c433f356dc4eb31a70e6f970fdab9681e260427 +size 137975 diff --git a/content/docs/server/link/putty2.png b/content/docs/server/link/putty2.png new file mode 100644 index 0000000..4788eba --- /dev/null +++ b/content/docs/server/link/putty2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61f04294ef1d39ab37454d3ea5510b6d95f93617fca9a38dd2df939e620940a3 +size 98908 diff --git a/content/docs/server/link/putty4.png b/content/docs/server/link/putty4.png new file mode 100644 index 0000000..ce4e6f9 --- /dev/null +++ b/content/docs/server/link/putty4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7e9852300a40421b087d2dc36779d185788bc85541a2b90497b86fc62f1b64e +size 43361 diff --git a/content/docs/server/link/putty5.png b/content/docs/server/link/putty5.png new file mode 100644 index 0000000..06cf3f0 --- /dev/null +++ b/content/docs/server/link/putty5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22a25cb094667c49fe0a86f6bbb2d9b79b8cf1f19c61edb13bfef926bfd5a25c +size 44135 diff --git a/content/docs/server/link/putty6.png b/content/docs/server/link/putty6.png new file mode 100644 index 0000000..250b464 --- /dev/null +++ b/content/docs/server/link/putty6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00b89369fe59de6bf3adea09cfd9cbc56959b846c62f1b21e4fc29b099b8cacc +size 77311 diff --git a/content/docs/server/link/rdp1.png b/content/docs/server/link/rdp1.png new file mode 100644 index 0000000..4bc30bb --- /dev/null +++ b/content/docs/server/link/rdp1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f00b5ecdcd5d9220e906646a5fe98da09897d02cf139ff4a36f1e918978ea8fc +size 18015 diff --git a/content/docs/server/link/rdp2.png b/content/docs/server/link/rdp2.png new file mode 100644 index 0000000..8b88b1c --- /dev/null +++ b/content/docs/server/link/rdp2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025b41daa91a8bc4e476d251eb313cb1773129f5ee40eba183783a8c188ff972 +size 40853 diff --git a/content/docs/server/link/winscp1.png b/content/docs/server/link/winscp1.png new file mode 100644 index 0000000..e474ddb --- /dev/null +++ b/content/docs/server/link/winscp1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d58a1cf803367e72e1f30856d11b4de8c9c48577f99d79614019d559d5cc8552 +size 64727 diff --git a/content/docs/server/link/winscp2.png b/content/docs/server/link/winscp2.png new file mode 100644 index 0000000..ea919e5 --- /dev/null +++ b/content/docs/server/link/winscp2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b942d29468330674aba10fbd9bf4cab270108b9ce5bcfae4e81291ce97625e7d +size 174472 diff --git a/content/docs/server/link/winscp3.png b/content/docs/server/link/winscp3.png new file mode 100644 index 0000000..6a475f0 --- /dev/null +++ b/content/docs/server/link/winscp3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c006212852673dfcae839672b33deaf98d7ca4136a05238053a7b6858381088f +size 31844 diff --git a/content/docs/server/link/winscp4.png b/content/docs/server/link/winscp4.png new file mode 100644 index 0000000..902116b --- /dev/null +++ b/content/docs/server/link/winscp4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36cf84b000fba9bc35c9167729afdbec6d7001457b91fd9fce6c1a184b0f3f4d +size 29424 diff --git a/content/docs/server/qa/_index.md b/content/docs/server/qa/_index.md new file mode 100644 index 0000000..21cc848 --- /dev/null +++ b/content/docs/server/qa/_index.md @@ -0,0 +1,94 @@ +--- +weight: 5 +title: "Q & A" +--- + +## 使用 SSH X11 forwarding + +远程桌面非常笨重。在 Linux 系统上连接到 Linux 服务器时,可以使用 SSH X11 forwarding 代替之: + +```bash +ssh chn@srv1.chn.moe -X -Y +``` + +之后在服务器上运行图形化程序时,就会在本地显示,就像在本地运行那样,只不过有明显的延迟。例如: + +```bash +ovito POSCAR +``` + +## RDP 设置连接类型 + +连接到 Linux 远程桌面时,需要手动设置连接类型为“LAN”,不然会很卡,我也不知道为什么。似乎是 xrdp 的 bug。 + +![](rdp1.png) + + +## 混合使用不同型号的节点 + +不建议这样做,如果你非要这样做再往下看。 + +计算软件(例如 VASP)在编译时需要针对不同的硬件进行优化得到不同的二进制程序,以此发挥硬件的最大性能。 +也就是说,针对不同型号的 CPU 优化的 VASP 其实并不是同一个程序,运行过程中 CPU 收到的指令也不相同。 +大多情况下,越新的 CPU 支持的指令集越多, + 针对新 CPU 优化的程序在旧 CPU 上不能运行(因为旧 CPU 看不懂这些新指令),针对旧 CPU 优化的程序在新 CPU 上运行效率不高。 + +以下面提交任务的命令为例: +```bash +sbatch --ntasks=64 --cpus-per-task=1 --export=ALL,OMP_NUM_THREADS=1 --wrap="vasp-intel srun --mpi=pmix vasp-std" +``` +任务会在某一个节点上先启动、再与其它节点通信并在其它节点上启动;具体启动哪一个 VASP,取决于最先启动的那个节点[^1]。 +例如,你可以使用下面的命令查看当前节点上最终会启动哪一个 VASP: +```bash +vasp-intel which vasp-std +``` + +要跨不同型号的节点使用 VASP,可以按照以下步骤操作: +1. 准备一个优化得足够“弱”的 VASP,可以在所有节点上运行。对于 srv1,可以使用 `srv1-node1` 上的 VASP,使用下面的命令计算它的路径: + ```bash + echo $(nix eval --raw nixos#nixosConfigurations.srv1-node1.pkgs.localPackages.vasp.intel)/bin/vasp-intel + ``` + 现在的计算结果是 `/nix/store/xlxz74mppn76iwk2y2njh7gjncwsx7r8-vasp-intel/bin/vasp-intel`。 + 随着更新,将来的路径会发生变化。 +2. 使用这个 VASP 提交任务,例如: + ```bash + sbatch -n64 --cpus-per-task=1 --export=ALL,OMP_NUM_THREADS=1 -pall --wrap="/nix/store/xlxz74mppn76iwk2y2njh7gjncwsx7r8-vasp-intel/bin/vasp-intel srun --mpi=pmix vasp-std" + ``` + +对于其它的计算软件,不一定能这样做。因为还有别的针对 CPU 优化的方案(例如,编译多个版本的二进制库,在运行时动态检测 CPU 型号并加载最合适的版本)。 + +并行使用不同型号的 CPU 时,队列系统或 MPI 往往并不会根据型号平衡各个 CPU 的负载,也就是算得快的 CPU 会等着算得慢的 CPU。 + +## BtrFS 是什么 + +它是一个比较现代的文件系统。相比于常用的其它文件系统(例如 Windows 的 NTFS),它的好处有: + +* 同样的内容只占用一份空间;以及内容会被压缩存储,在读取时自动解压。这样大致可以节省一多半的空间。 +* 每小时自动备份,放置在 `/nix/persistent/.snapshots` 中,大致上会保留最近一周的备份。如果你误删了什么文件,可以去里面找回。 + +## 查看文件或文件夹的大小 + +Windows 下不用教。Linux 下分两种情况: + +* 对于厦大超算(jykang),使用 `du -ah --max-depth=0 文件或目录名`。 +* 对于其它服务器(使用了 BtrFS):由于压缩和 CoW,实际占用空间会小于大小,因此 `du` 得到的结果不准确。 + 使用 `compize 文件或目录名` 命令。 + 得到的结果中,`TOTAL` 行 `Disk Usage` 列为实际占用的空间,`TOTAL` 行 `Referenced` 列为文件或文件夹的大小。 + +## 查看硬盘剩余空间 + +Windows 下不用教。Linux 下分两种情况: + +* 对于厦大超算(jykang):硬盘空间实际上是比较大的,紧张的是 `jykang` 这个用户的限额(quota)。 + 似乎没有 root 权限没法看。按照经验大概是 800 G 多一点。 + 如果你知道怎样不用 root 用户看,请务必教教我。 +* 对于其它服务器:`df -h`。 + +## 自动启动 Pageant 并添加密钥 + +待补充。 + +[^1]: MPI 是按照绝对路径来搜索可执行文件的。 + NixOS 的特性导致不同参数编译的 VASP 会被放在不同的目录下,因此会在其它节点上启动与最先启动的节点相同、但不是针对这些节点优化的 VASP。 + 如果通过一些手段将不同参数编译的 VASP 放在同一个位置,它们是否能正常通信,我觉得应该是可以的。 + 但我觉得这样做意义不大,因为算得快的 CPU 还是需要等着算得慢的 CPU。 diff --git a/content/docs/server/qa/rdp1.png b/content/docs/server/qa/rdp1.png new file mode 100644 index 0000000..fcc02ac --- /dev/null +++ b/content/docs/server/qa/rdp1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41c1004999e496305e43be5e06983575b6d1e59dbf74c7d52767523cf82073a9 +size 15481 diff --git a/content/docs/server/qa/rdp2.png b/content/docs/server/qa/rdp2.png new file mode 100644 index 0000000..89f69cd --- /dev/null +++ b/content/docs/server/qa/rdp2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01aa4b4491d8491afe7c0d1b2cd437fe8aa9e853a55600b73d542d2c384f3406 +size 69287 diff --git a/content/docs/server/start.md b/content/docs/server/start.md new file mode 100644 index 0000000..3950532 --- /dev/null +++ b/content/docs/server/start.md @@ -0,0 +1,142 @@ +--- +weight: 1 +title: "快速开始" +--- + +根据你的目的(要用 VASP 还是 FDTD Solutions),按照不同步骤操作: + +## 我要使用 VASP + +### 1. 获取密钥或密码 + +如果你是吴志明老师的学生,要使用 srv1,那么你应该已经有了用户名(形如 `GROUPIII-1`)和密码。 +如果不是这种情况,你需要一个密钥。密钥是一个文件,以 `.ppk` 为后缀,用于连接到服务器。 + +* **如果你在康老师直属的小组里,或者要使用的服务器不是厦大超算(jykang)**:密钥是每人一把,所有服务器通用。如果没有的话直接找我要。 +* **如果你不在康老师直属的小组里,并且要使用的服务器是厦大超算(jykang)**: + 密钥是每个老师一把,找你的导师或者学长学姐要,如果你们小组都没有的话找项磊磊要(有什么技术问题再找我)。 + +### 2. 准备试错 + +* **如果使用的是厦大超算(jykang)**:不会用的命令别瞎敲,不要擅自安装软件。 + 由于多人共用一个账号、没有合适的权限管理机制,环境非常脆弱,所以操作不要太随意,除非你很自信,即使全部弄坏也能自己从头搭建。 + 需要安装什么软件的话找我。 +* **如果吴志明的学生,使用 srv1**:我已经装好的软件(例如 VASP)你不可能弄坏。 + 但我不确定他是否会把一个账号共享给很多人使用,如果会的话,不要删除或者修改别人的文件。 +* **如果是其它情况**:请随意尝试,你能弄坏算我输。 + +### 3. 安装软件 + +在自己电脑上下载安装 [PuTTY](https://www.putty.org/) 和 [WinSCP](https://winscp.net/eng/index.php),并按照下面的步骤配置: + +* **如果你要使用厦大超算(jykang)**:参照“连接到服务器”中“连接 VASP 服务器,开启 SSH 代理转发”这一节的内容,配置 PuTTY 和 WinSCP。 + [点此传送](../link#连接-vasp-服务器开启-ssh-代理转发) +* **如果是吴志明老师的学生,要使用 srv1**:参照“连接到服务器”中“连接 VASP 服务器,使用密码”这一节的内容,配置 PuTTY 和 WinSCP。 + [点此传送](../link#连接-vasp-服务器使用密码) +* **如果是其它情况**:参照“连接到服务器”中“连接 VASP 服务器,不开启 SSH 代理转发”这一节的内容,配置 PuTTY 和 WinSCP。 + [点此传送](../link#连接-vasp-服务器不开启-ssh-代理转发) + +如果你想要使用其它 SSH 客户端也可以,连接用到的参数见[连接协议和参数](../config#连接协议和参数)。 + +### 4. 学习 Linux 基础操作 + +* **如果你之前没有接触过 Linux**:请找学长学姐要以前人写的教程(我还没写,咕咕咕)。 +* **如果你之前出于兴趣接触过 Linux(不需要做过科学计算)**:跳过这一步,你知道的已经太多了。 + +### 5. 准备一个测试任务 + +和学长学姐要一个最基础的自洽或弛豫的 VASP 输入文件(包括`INCAR` `POSCAR` `POTCAR` `KPOINTS`)。 + +**如果你要使用的是厦大超算(jykang)**:在服务器上导师的目录下新建一个文件夹,命名为你的名字。 + 例如我的是 `linwei/chn`。之后你的计算都在这个目录下进行。新建一个目录(比如可以叫 `test`),把这四个文件放进去,也就是: + +{{< filetree/container >}} + {{< filetree/folder name="导师名字" >}} + {{< filetree/folder name="君の名前" >}} + {{< filetree/folder name="test" >}} + {{< filetree/file name="INCAR" >}} + {{< filetree/file name="KPOINTS" >}} + {{< filetree/file name="POSCAR" >}} + {{< filetree/file name="POTCAR" >}} + {{< /filetree/folder >}} + {{< /filetree/folder >}} + {{< /filetree/folder >}} +{{< /filetree/container >}} + +**如果是吴志明老师的学生,要使用 srv1**:按照你导师的要求来放置文件(我也不知道他计划如何安排)。 + +**如果是其它情况**:登陆后看到的目录就是你的“家目录”,你随便在里面放东西,不影响别人,别人也看不到。 + 新建一个目录(比如可以叫 `test`),把这四个文件放进去,也就是: + +{{< filetree/container >}} + {{< filetree/folder name="test" >}} + {{< filetree/file name="INCAR" >}} + {{< filetree/file name="KPOINTS" >}} + {{< filetree/file name="POSCAR" >}} + {{< filetree/file name="POTCAR" >}} + {{< /filetree/folder >}} +{{< /filetree/container >}} + +### 6. 投递测试任务 + +**如果你要使用的是厦大超算(jykang)**: + +1. `cd` 到 `test` 目录。 +2. 使用命令 `chn_bsub`,然后按照提示,鼠标点选一个队列,鼠标点提交任务。看不懂的选项都是你暂时不需要看懂的,保持默认。 +3. 恭喜你已经学会投递任务了,足以应付 90% 的需求。 +4. 如果希望使用命令(而不是图形界面)投递任务,下面这些命令作为参考,可以照抄但至少改一下任务名: + +```bash +bsub -J "my-great-job" -q normal_1day -n 28 -R 'span[hosts=1]' -o output.txt chn_vasp.sh 640_std +``` + +**如果你要使用的是其它服务器**: + +1. `cd` 到 `INCAR` 等文件所在的目录。 +2. 使用命令 `sbatch`,不要加任何参数,然后按照提示,用鼠标点选,最后提交任务。看不懂的选项都是你暂时不需要看懂的,保持默认。 +3. 恭喜你已经学会投递任务了,足以应付至少一多半的需求。 +4. 如果希望使用命令(而不是图形界面)投递任务,下面这些命令作为参考: + +对于 srv1: +```bash +# 使用主节点,也就是最快那个节点,占满它的所有 CPU +sbatch --ntasks=8 --cpus-per-task=10 --export=ALL,OMP_NUM_THREADS=10,OMP_STACKSIZE=512m --hint=nomultithread --job-name="my-great-job" --output=output.txt --wrap="vasp-intel srun --mpi=pmix vasp-std" +# 使用其它比较老的节点,慢一些但也能用,但不使用与 FDTD 冲突的那个节点;占满单个节点的所有 CPU +sbatch --ntasks=4 --cpus-per-task=8 --export=ALL,OMP_NUM_THREADS=8,OMP_STACKSIZE=512m --hint=nomultithread --job-name="my-great-job" --output=output.txt --partition=old --nodes=1-1 --wrap="vasp-intel srun --mpi=pmix vasp-std" +# 使用与 FDTD 冲突的那个节点,不要同时运行 FDTD 和 VASP;占满它的所有 CPU +sbatch --ntasks=4 --cpus-per-task=8 --export=ALL,OMP_NUM_THREADS=8,OMP_STACKSIZE=512m --hint=nomultithread --job-name="my-great-job" --output=output.txt --partition=fdtd --wrap="vasp-intel srun --mpi=pmix vasp-std" +``` + +对于 xmupc1/xmupc2: + +```bash +# 使用 4090 计算 +sbatch --ntasks=1 --gpus=4090:1 --job-name="my-great-job" --output=output.txt vasp-nvidia-std +``` + +之后可以利用空闲时间,浏览一下[使用服务器](..)中的其它内容。 + +### 7. 学习 VASP 的使用 + +每个小组、每个人使用 VASP 的侧重点不同,请找学长学姐要学习资料,或者自己在网上学习。 + +当然也有一些基础和共通的,但我还没写(咕咕咕)。 + +## 我要使用 FDTD Solutions + +### 1. 确定要使用哪台服务器 + +大多数用于 FDTD Solutions 的 Windows 服务器都不是我管理的。 +如果你确定你要用的是我管理的唯一那一台(吴志明学生,要使用小组里的服务器),那么请继续。 + +### 2. 获取账号 + +吴志明老师应该会把账号(形如 `GROUPIII-4`)和密码都发给你。 + +### 3. 连接到服务器 + +使用 Windows 自带的远程桌面连接到服务器。懂的都懂,不懂的看[连接 FDTD 服务器](../link#连接-fdtd-服务器)。 + +### 4. 运行任务 + +运行 FDTD Solutions 的任务并不需要什么特殊操作,但有一些注意事项务必知晓,详见[使用队列系统-Windows](../job#windows)。 diff --git a/content/docs/server/stat.md b/content/docs/server/stat.md new file mode 100644 index 0000000..6476392 --- /dev/null +++ b/content/docs/server/stat.md @@ -0,0 +1,68 @@ +--- +weight: 6 +title: 厦大超算(jykang)使用统计 +--- + +每个月的结果仅包含当月完成的任务(无论什么时候提交)。 +更详细的信息(例如,每个任务所用核时)见[这里](https://git.chn.moe/chn/jykang-statistics)。 + +## 2024 年 + +{{< tabs items="5 月,6 月,7 月,8 月" >}} + {{< tab >}} + 注: + * 每个密钥统计的核时仅包括 5 月 10 日后提交(即正式启用这个系统后才提交)的任务。 + * 5 月 10 日之前提交但在正式启用这个系统后才完成的任务被统计到 `unknown` 账号下。 + + | 账号 | 使用核时 | 登陆次数(总计/交互式/非交互式) | 完成任务(总计/成功/失败) | SSH 密钥编号::指纹 | + | :--: | :--: | :--: | :--: | :--: | + | Yaping Wu | 37178.79 | 840/245/595 | 1038/683/355 | `00::SHA256:7bmG24muNsaAZkCy7mQ9Nf2HuNafmvUO+Hf1bId9zts` | + | Jing Li | 0.00 | 4/3/1 | 0/0/0 | `01::SHA256:dtx0QxdgFrXn2SYxtIRz43jIAH6rLgJidSdTvuTuews` | + | Huahan Zhan | 2393.33 | 87/51/36 | 38/19/19 | `02::SHA256:8crUO9u4JiVqw3COyjXfzZe87s6XZFhvi0LaY0Mv6bg` | + | Na Gao | 1935.25 | 88/39/49 | 20/17/3 | `03::SHA256:QkmIYw7rmDEAP+LDWxm6L2/XLnAqTwRUB7B0pxYlOUs` | + | Duanjun Cai | 405.78 | 25/7/18 | 8/3/5 | `04::SHA256:WfUP4s0BzEspDweDIrOIed4MbW4v9W1spbp0EN6O5dk` | + | Xu Li | 39.17 | 5/1/4 | 19/9/10 | `05::SHA256:VmVTvYnOOXOFcw+RH2AuUcj7hioieIJhwGOCDCfm0/w` | + | Haonan Chen | 46685.25 | 419/133/286 | 1186/588/598 | `chn::SHA256:LNoYfq/SM7l8sFAy325WpC+li+kZl3jwST7TmP72Tz8` | + | Bin Gong | 261.12 | 60/12/48 | 37/28/9 | `gb::SHA256:VJT5wgkb2RcIeVNTA+/NKxokctbYnJ/KgH6IxrKqIGE` | + | Leilei Xiang | 3118.69 | 53/17/36 | 11/4/7 | `xll::SHA256:umC3/RB1vS8TQBHsY3IzhOiyqVrOSw2fB3rIpDQSmf4` | + | (unknown) | 22930.42 | 0/0/0 | 92/42/50 | `(unknown)` | + {{< /tab >}} + {{< tab >}} + | 账号 | 使用核时 | 登陆次数(总计/交互式/非交互式) | 完成任务(总计/成功/失败) | SSH 密钥编号::指纹 | + | :--: | :--: | :--: | :--: | :--: | + | Yaping Wu | 74726.21 | 844/258/586 | 1553/925/628 | `00::SHA256:7bmG24muNsaAZkCy7mQ9Nf2HuNafmvUO+Hf1bId9zts` | + | Huahan Zhan | 2916.42 | 63/27/36 | 92/77/15 | `02::SHA256:8crUO9u4JiVqw3COyjXfzZe87s6XZFhvi0LaY0Mv6bg` | + | Na Gao | 1256.11 | 31/10/21 | 34/31/3 | `03::SHA256:QkmIYw7rmDEAP+LDWxm6L2/XLnAqTwRUB7B0pxYlOUs` | + | Duanjun Cai | 21889.09 | 185/73/112 | 166/114/52 | `04::SHA256:WfUP4s0BzEspDweDIrOIed4MbW4v9W1spbp0EN6O5dk` | + | Xu Li | 257.32 | 16/5/11 | 65/41/24 | `05::SHA256:VmVTvYnOOXOFcw+RH2AuUcj7hioieIJhwGOCDCfm0/w` | + | Haonan Chen | 28311.28 | 290/157/133 | 923/755/168 | `chn::SHA256:LNoYfq/SM7l8sFAy325WpC+li+kZl3jwST7TmP72Tz8` | + | Leilei Xiang | 12133.32 | 37/8/29 | 7/3/4 | `xll::SHA256:umC3/RB1vS8TQBHsY3IzhOiyqVrOSw2fB3rIpDQSmf4` | + | Linyang Xie | 0.00 | 9/4/5 | 0/0/0 | `xly::SHA256:C52EURGhRHtf+odfmE2qofh7NO24MnGB3Q8GhRQhHiM` | + | (unknown) | 319.22 | 0/0/0 | 8/3/5 | `(unknown)` | + {{< /tab >}} + {{< tab >}} + | 账号 | 使用核时 | 登陆次数(总计/交互式/非交互式) | 完成任务(总计/成功/失败) | SSH 密钥编号::指纹 | + | :--: | :--: | :--: | :--: | :--: | + | Yaping Wu | 102727.87 | 716/187/529 | 1663/993/670 | `00::SHA256:7bmG24muNsaAZkCy7mQ9Nf2HuNafmvUO+Hf1bId9zts` | + | Huahan Zhan | 213.24 | 32/11/21 | 27/21/6 | `02::SHA256:8crUO9u4JiVqw3COyjXfzZe87s6XZFhvi0LaY0Mv6bg` | + | Na Gao | 287.33 | 31/12/19 | 28/15/13 | `03::SHA256:QkmIYw7rmDEAP+LDWxm6L2/XLnAqTwRUB7B0pxYlOUs` | + | Duanjun Cai | 24.42 | 18/6/12 | 4/2/2 | `04::SHA256:WfUP4s0BzEspDweDIrOIed4MbW4v9W1spbp0EN6O5dk` | + | Haonan Chen | 135923.95 | 160/44/116 | 366/246/120 | `chn::SHA256:LNoYfq/SM7l8sFAy325WpC+li+kZl3jwST7TmP72Tz8` | + | Bin Gong | 0.00 | 14/0/14 | 0/0/0 | `gb::SHA256:VJT5wgkb2RcIeVNTA+/NKxokctbYnJ/KgH6IxrKqIGE` | + | Leilei Xiang | 56213.51 | 131/49/82 | 202/126/76 | `xll::SHA256:umC3/RB1vS8TQBHsY3IzhOiyqVrOSw2fB3rIpDQSmf4` | + | Linyang Xie | 372.31 | 17/7/10 | 12/6/6 | `xly::SHA256:C52EURGhRHtf+odfmE2qofh7NO24MnGB3Q8GhRQhHiM` | + | Junqi Yao | 1156.36 | 17/7/10 | 5/1/4 | `yjq::SHA256:fdq5k13N2DAzIK/2a1Mm4/ZVsDUgT623TSOXsVswxT8` | + | (unknown) | 5160.49 | 0/0/0 | 27/7/20 | `(unknown)` | + {{< /tab >}} + {{< tab >}} + | 账号 | 使用核时 | 登陆次数(总计/交互式/非交互式) | 完成任务(总计/成功/失败) | SSH 密钥编号::指纹 | + | :--: | :--: | :--: | :--: | :--: | + | Yaping Wu | 166182.58 | 571/169/402 | 1058/733/325 | `00::SHA256:7bmG24muNsaAZkCy7mQ9Nf2HuNafmvUO+Hf1bId9zts` | + | Huahan Zhan | 0.00 | 5/2/3 | 0/0/0 | `02::SHA256:8crUO9u4JiVqw3COyjXfzZe87s6XZFhvi0LaY0Mv6bg` | + | Duanjun Cai | 0.00 | 6/3/3 | 7/0/7 | `04::SHA256:WfUP4s0BzEspDweDIrOIed4MbW4v9W1spbp0EN6O5dk` | + | Haonan Chen | 38110.55 | 133/50/83 | 701/440/261 | `chn::SHA256:LNoYfq/SM7l8sFAy325WpC+li+kZl3jwST7TmP72Tz8` | + | Bin Gong | 22.98 | 11/2/9 | 18/13/5 | `gb::SHA256:VJT5wgkb2RcIeVNTA+/NKxokctbYnJ/KgH6IxrKqIGE` | + | Leilei Xiang | 0.00 | 1/0/1 | 0/0/0 | `xll::SHA256:umC3/RB1vS8TQBHsY3IzhOiyqVrOSw2fB3rIpDQSmf4` | + | (unknown) | 1474.90 | 0/0/0 | 10/7/3 | `(unknown)` | + {{< /tab >}} +{{< /tabs >}} diff --git a/content/docs/stuff/_index.md b/content/docs/stuff/_index.md new file mode 100644 index 0000000..aae3804 --- /dev/null +++ b/content/docs/stuff/_index.md @@ -0,0 +1,8 @@ +--- +weight: 2 +title: "便民小工具" +--- + +{{< cards >}} + {{< card link="lottery" title="组会抽奖工具" subtitle="~~万恶之源~~" icon="present" >}} +{{< /cards >}} diff --git a/content/docs/stuff/lottery/_index.md b/content/docs/stuff/lottery/_index.md new file mode 100644 index 0000000..909bb93 --- /dev/null +++ b/content/docs/stuff/lottery/_index.md @@ -0,0 +1,15 @@ +--- +weight: 2 +title: "组会抽奖工具" +--- + +
+ +
+{{< hextra/hero-button text="立即下载" link="幸运抽奖.exe" >}} +
+ +* 按照项磊磊的要求,翔安的同学(导师为卢卫芳或黄凯)以及年龄 35 岁以上的同学免抽奖。 +* 报毒是正常的,实际上没有毒。要想不报毒,[要么给微软交钱,要么主动给微软汇报(我嫌麻烦)](https://stackoverflow.com/questions/76002121/stop-windows-defender-antivirus-from-detecting-myapp)。 +* 源代码:[GitHub](https://github.com/CHN-beta/group-meeting-lottery)。 +* 别找我改概率/删名字,我不敢。 diff --git a/content/docs/stuff/lottery/幸运抽奖.exe b/content/docs/stuff/lottery/幸运抽奖.exe new file mode 100644 index 0000000..91c38a7 --- /dev/null +++ b/content/docs/stuff/lottery/幸运抽奖.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edc74896d6eb214d26ea3391899d378e97cbedbfa8ddf6adc3b42fb89b7f8e38 +size 66733251 diff --git a/data/icons.yaml b/data/icons.yaml new file mode 100644 index 0000000..48d57be --- /dev/null +++ b/data/icons.yaml @@ -0,0 +1,10 @@ +misskey: +fediverse: +matrix: +wechat: +qq: +gitea: +rocket: +queue: +connect: +present: diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..d49d276 --- /dev/null +++ b/default.nix @@ -0,0 +1,13 @@ +{ stdenv, hextra, hugo }: stdenv.mkDerivation +{ + name = "blog"; + src = ./.; + nativeBuildInputs = [ hugo ]; + configurePhase = + '' + mkdir themes + ln -s ${hextra} themes/hextra + ''; + buildPhase = "hugo"; + installPhase = "cp -r public $out"; +} diff --git a/hugo.yaml b/hugo.yaml new file mode 100644 index 0000000..1a84525 --- /dev/null +++ b/hugo.yaml @@ -0,0 +1,137 @@ +baseURL: https://blog.chn.moe/ +theme: hextra + +enableRobotsTXT: true +enableGitInfo: false +enableEmoji: true +hasCJKLanguage: true + +# services: +# googleAnalytics: +# ID: G-MEASUREMENT_ID + +outputs: + home: [ html ] + page: [ html ] + section: [ html, rss ] + +defaultContentLanguage: zh-cn +languages: + zh-cn: + languageName: 简体中文 + languageCode: zh-CN + weight: 1 + title: 陈浩南的文档和博客 + en: + languageName: English + weight: 2 + title: My New Hugo Site + contentDir: content/en + +# Needed for mermaid/katex shortcodes +markup: + goldmark: + renderer: + unsafe: true + highlight: + noClasses: false + +enableInlineShortcodes: true + +menu: + main: + - identifier: documentation + name: Documentation + pageRef: /docs + weight: 1 + - identifier: blog + name: Blog + pageRef: /blog + weight: 2 + - name: Search + weight: 3 + params: + type: search + + sidebar: + - identifier: more + name: More + params: + type: separator + weight: 1 + - identifier: welcome + name: 欢迎页 + pageRef: / + weight: 2 + - identifier: about + name: 关于本站 + pageRef: /about + weight: 3 + - identifier: contact + name: 联系我 + pageRef: /contact + weight: 4 + +params: + description: Modern, responsive, batteries-included Hugo theme for creating beautiful static websites. + navbar: + displayTitle: true + displayLogo: false + logo: + path: images/logo.svg + dark: images/logo-dark.svg + # width: 40 + # height: 20 + # link: / + width: wide + page: + # full (100%), wide (90rem), normal (1280px) + width: wide + theme: + # light | dark | system + default: system + displayToggle: true + footer: + enable: true + displayCopyright: true + displayPoweredBy: true + width: normal + displayUpdatedDate: true + dateFormat: "January 2, 2006" + search: + enable: true + type: flexsearch + flexsearch: + # index page by: content | summary | heading | title + index: content + # full | forward | reverse | strict + # https://github.com/nextapps-de/flexsearch/#tokenizer-prefix-search + tokenize: forward + editURL: + enable: false + base: "https://github.com/imfing/hextra/edit/main/exampleSite/content" + blog: + list: + displayTags: true + # date | lastmod | publishDate | title | weight + sortBy: date + sortOrder: desc # or "asc" + highlight: + copy: + enable: true + # hover | always + display: hover + comments: + enable: true + type: giscus + giscus: + repo: CHN-beta/blog-discussion + repoId: R_kgDOM74xDw + category: Announcements + categoryId: DIC_kwDOM74xD84CjFo6 + mapping: pathname + strict: 0 + reactionsEnabled: 1 + emitMetadata: 0 + inputPosition: top + lang: zh-CN diff --git a/layouts/partials/custom/head-end.html b/layouts/partials/custom/head-end.html new file mode 100644 index 0000000..f126621 --- /dev/null +++ b/layouts/partials/custom/head-end.html @@ -0,0 +1,11 @@ + +