1 月
目前的组会安排大致是每周二 10:00 pm(BCI) 和每周五 10:00 pm(121) 各一次.
1.16
整理了一下个人博客的笔记和 s4 的代码库. 但是在会上导师并没有对此有积极的反馈, 大致观点为:
- 什么时候能学完这个博客页面
(我的回应是我也不太清楚, 因为我不能确定学习的速度)
-
ssm 只是 BCI 大课题里的很小的一个模型, 现在学得太慢了, 研究生会有很多没有学过的东西.
-
不应该花太多时间学到能给别人讲解的程度
在寻求了 ChatGPT 的帮助后, 大致的思路是:
-
导师想看到的不是 "学到了什么", 而是有具体的 "研究产出"
-
因此, 给导师展示自己的笔记/代码库其实是一个错误的思路.
诚然, 以近乎为零的基础搭建一个神经网络的代码库, 需要读懂/推导/实现, 是一个很辛苦的过程. 但是这并没有什么卵用.
GPT 给我进行了这样的支招:
- 停止展示私人笔记.
可以继续学习的过程, 但是不要再给导师展示了. 除非导师主动问起.
- 工作重点回到 POSSM 的复现上.
由于时间比较紧张, 最好尽快学完教学博客页面, 理解其代码后回到 POSSM 的复现上.
上次其实已经指出了目标是 POSSM 对于 Falcon 数据库的延展性(是否跟声称的那样具有较好的迁移性).
那么主要的路径就是:
-
以目前学习 s4 实现的代码基础, 重新看 my_POSSM 库的代码, 理解 forward 数据流在模块中的传递.
-
在保持 POSSM 其余结构不变的前提下, 比较 GRU 和 S4 模型之间的差异(解码速度, 收敛速度, 推理延迟...)
根据 Hueber(2024), 硬件的指标有
-
decoding performance.
$R^{2}$ 和 RMSE(均方根误差)/MSE(均方误差) 等指标衡量解码性能.
# y_true, y_pred: (T, 2) or (batch, T, 2)
ss_res = ((y_true - y_pred) ** 2).sum()
ss_tot = ((y_true - y_true.mean()) ** 2).sum()
r2 = 1 - ss_res / ss_tot
- latency
inference latency per time bin(单个时间步的推理延迟)
import time
torch.cuda.synchronize()
t0 = time.time()
_ = model(spike, spike_lengths)
torch.cuda.synchronize()
latency_ms = (time.time() - t0) * 1000
real-time constraint (inference latency < bin size)
- computational efficiency
Parameter count
sum(p.numel() for p in model.parameters())
- stability
收敛 epoch 数; validation; training instability
需要注意到的是, 虽然师兄写的 toy model(my_POSSM) 使用的是 torch 框架, s4 教学博客依赖于 jax 和 flax 库, 但是这并不代表着需要自己使用 torch 重新构造一遍 s4 的实现. 直接寻找现有的 torch 实现才是更安全可靠的方法.
1.19
idea: 如何使用 snn 来对 possm 使用的数据库进行分析?
观察 LIF neuron 的实现.
如何评估一个算法的功耗?
我决定立刻停止 s4 博客的学习.
虽然我现在连过博资考的信心都没有, 但是和老板的谈话我还是意识到, 应该尽早开始准备有关于开题的内容. 作为一个交叉所的博士生, 一个比较大的问题就是我的毕业论文最后要落在物理的语言上.
这个工作, 本质上是一个随机动力学系统的建模问题. 即 高维随机脉冲序列的状态空间建模.
BCI 提供了一个高度复杂, 强噪声, 长时依赖的真实系统, 为检验状态空间模型建模能力提供了理想的平台. (BCI 作为 benchmark).
在高维神经脉冲序列的实时解码任务中, 不同状态空间的建模方法(RNN, SSM, SNN...), 建模能力, 计算效率, 稳定性应当如何权衡?
虽然我并不赞同前导师的某些理念, 但是有一句话我是感受颇深的: "不要将自己的人际关系过分局限于和导师的关系上, 要多和实验室的师兄师姐沟通". 现在我重新踏上了一条路, 虽然课题组性质发生了很大变化, 但是我的处境几乎没有改变.
Let the feast begin.
3 月
3.11
显然这个月的主旋律就是准备第二次博资考了. 这一周前三天还在准备博资考复习资料的撰写, 后面三天则是比较匆忙地阅读文献来做组会的报告, 现在算是小阶段的结束, 改回神继续准备考试.
最头疼的是问遍 AI 都没推导出聚合物混合熵的推导公式, 这个 Flory 理论的计算有点东西.
3.12
在 1-1 meeting 上交流了一下, 目前的打算是继续 BCI 课题的研究作为训练/练手, 后续可能会有自己更感兴趣的方向(比如吸引子?)再阅读相关文献进行调研, 以准备下学期的开题答辩.
写完了 Mixing entropy 和 Flory 理论的最后一部分, 后续对于博资考复习的初步计划是:
-
根据自己高等统计物理的笔记, 重新学习一下有关布朗运动有关的知识, 并且将其和考试题目中的对应;
-
根据 Gemini 的回答, 完成模拟考卷的学习和整理;
在这两步完成之后, 就是每天背题了.
3.13
稍微鼓捣了一下 busuanzi 和 umami 的脚本, 结果发现 umami 毛用没有, 还不如 google analytics 呢, 于是兜兜转转又回到了 busuanzi.
给网页加了个自动包裹 aligned 的功能, 终于不用反复手搓了.
3.14
宿舍笔记本的 Tailscale 神秘断开了, 本来一开始在装上去的时候就有这毛病了. 测试了半天姑且猜测是因为 Clash 的 TUN 和 Mixin 导致. 把它关掉之后, 重新装了一下最新的版本, 然后使用管理员打开, 终于弹出登录网页了.
并且今天还修复了一个心腹大患, 即工位电脑到宿舍笔记本的 ssh 连接问题, 之前老是要我手动输入密码, 现在终于能轻松登录了.
$path = "$env:USERPROFILE\.ssh\authorized_keys"
# 1. 确保文件存在
if (Test-Path $path) {
# 2. 禁用继承并删除所有无关权限
icacls $path /inheritance:r
# 3. 只给 SYSTEM、Administrators 组和当前用户 (pc) 权限
icacls $path /grant "SYSTEM:F"
icacls $path /grant "Administrators:F"
icacls $path /grant "${env:USERNAME}:F"
Write-Host "权限修复完成!" -ForegroundColor Green
} else {
Write-Host "未找到 authorized_keys 文件,请确认路径!" -ForegroundColor Red
}
还有就是取消掉工位电脑的工作区信任检查, 每次还要把它叉掉不然会一直卡在 ssh 连接. 现在对工位的生产环境满意多了.
3.15
今天溜到工位也没做什么, 主要是把周二的学术写作课的作业做了. 说实话, 这种课就是凭着是培养计划内的必选课, 一个劲地整蛊学生, 作业的 workload 感觉比正常读文献都多. 都研二下了还搞这种东西, 有点不知好歹了.
另外就是组会和 1-1 meeting 的时间改了. 目前的计划是先把 RNN 搞起来, 做一个 baseline 和 rePOSSM 做一下对比.
3.16
工位电脑 Outlook 收个邮件还显示广告, 果断换成 ThunderBird 了.
另外找到了一个用来 AI 解析 Github 库的工具. 有一部分代码是之前移植过来的但是还没有搞懂, 希望这个工具能发挥点作用.
今天重新整理了一下之前的 rePOSSM 代码, 把它重构成了以后可以加入 baseline 的形式, 并且完善了一下之前没有考虑到的点. 看下明天有没有时间做一个最简形式的 RNN.
首先是 对训练结束后的 ed0336 gru 为 backbone 的模型进行评估.
(possm) hyc@Dominant:/mnt/d/codefiles/python/myPOSSM/rePOSSM$ python main.py --eval --model possm --backbone gru --ckpt ed0336
============================================================
Model type: possm
Backbone: gru
Device: cuda
Loading checkpoint: /mnt/d/codefiles/python/myPOSSM/rePOSSM/checkpoints/possm_gru_seed42_ed0336.pt
============================================================
Using device: cuda
Loading model from /mnt/d/codefiles/python/myPOSSM/rePOSSM/checkpoints/possm_gru_seed42_ed0336.pt...
Backbone selected: gru
Number of channels: 96
Training Baseline (Session 0) Loaded.
--------------------------------------------------
Evaluating Session 0... R2: 0.5281 (MSE: 0.0363)
Evaluating Session 1... R2: 0.5094 (MSE: 0.0236)
Evaluating Session 2... R2: 0.4155 (MSE: 0.0286)
Evaluating Session 3... R2: 0.0286 (MSE: 0.0674)
Evaluating Session 4... R2: -0.0613 (MSE: 0.0541)
Evaluating Session 7... R2: -0.1071 (MSE: 0.0562)
Evaluating Session 11... R2: -0.9990 (MSE: 0.1125)
==================================================
Session | R2 (Avg) | R2 (X) | R2 (Y) | MSE
--------------------------------------------------
0 | 0.5281 | 0.3375 | 0.7187 | 0.0363
1 | 0.5094 | 0.4389 | 0.5800 | 0.0236
2 | 0.4155 | 0.2518 | 0.5792 | 0.0286
3 | 0.0286 | -0.1387 | 0.1959 | 0.0674
4 | -0.0613 | 0.1045 | -0.2272 | 0.0541
7 | -0.1071 | -0.2591 | 0.0449 | 0.0562
11 | -0.9990 | -1.5555 | -0.4425 | 0.1125
==================================================
从 Session 3 开始性能急剧下降.
然后是以 s4d 为 backbone 的模型. 今天暂时训练不完了, 明天再说.
3.17
(possm) hyc@Dominant:/mnt/d/codefiles/python/myPOSSM/rePOSSM$ python main.py --eval --model possm --backbone s4d --ckpt 254f39
============================================================
Model type: possm
Backbone: s4d
Device: cuda
Loading checkpoint: /mnt/d/codefiles/python/myPOSSM/rePOSSM/checkpoints/possm_s4d_seed42_254f39.pt
============================================================
Using device: cuda
Loading model from /mnt/d/codefiles/python/myPOSSM/rePOSSM/checkpoints/possm_s4d_seed42_254f39.pt...
Backbone selected: s4d
Number of channels: 96
Model dimension summary:
embed_dim: 64
num_latents: 1
input_dim: 64
hidden_size: 512
Training Baseline (Session 0) Loaded.
--------------------------------------------------
Evaluating Session 0... R2: 0.4849 (MSE: 0.0393)
Evaluating Session 1... R2: 0.4782 (MSE: 0.0250)
Evaluating Session 2... R2: 0.3905 (MSE: 0.0299)
Evaluating Session 3... R2: 0.0763 (MSE: 0.0649)
Evaluating Session 4... R2: 0.0484 (MSE: 0.0477)
Evaluating Session 7... R2: 0.0376 (MSE: 0.0492)
Evaluating Session 11... R2: -0.1240 (MSE: 0.0614)
==================================================
Session | R2 (Avg) | R2 (X) | R2 (Y) | MSE
--------------------------------------------------
0 | 0.4849 | 0.2911 | 0.6787 | 0.0393
1 | 0.4782 | 0.4196 | 0.5367 | 0.0250
2 | 0.3905 | 0.1967 | 0.5843 | 0.0299
3 | 0.0763 | -0.1279 | 0.2805 | 0.0649
4 | 0.0484 | 0.3727 | -0.2759 | 0.0477
7 | 0.0376 | -0.1818 | 0.2569 | 0.0492
11 | -0.1240 | -0.1667 | -0.0813 | 0.0614
==================================================
-
完成了旧代码库的重构, 准备加入 baseline 的实现, 目前正在处理 RNN.
-
在训练分布附近 (0,1,2) 附近 GRU 更强, 在泛化能力上 (7,11) S4D 稍微更稳健一些, 但是两者在整体上泛化能力目前都较弱 (图)
-
loss 降线. S4D 的实际耗时是远超 GRU 的.
-
目前 RNN 依托的是 POSSM 的 preprocess.py 的 sparse tokenization, 原论文中示意图比较相近, 但是实际上能不能这么做有待商榷. 并且目前只完成了 train 部分的嵌入, 在 long_term_inference 的兼容还没有做好.
-
为什么要旋转编码... 等细节问题
-
CNN?
心态要好啊.
3.18
需要完成的工作:
$\sqrt{}$ 博资考复习资料的 random walk 补充完善;
-
RNN 的 preprocess, dataloader 和 long_term_inference 模块;
-
校正一遍博资考的 markdown 文档;
-
使用纸笔完成一次复习资料的拉通(特别是有关于 flory 理论和 random walk 的部分).
-
补充一下复习笔记中的 splay/twist/bend 自由能的知识点, 目前写得太简略了, 而且也不好记忆.
工位的电脑老是出现断网的毛病, 然后 github 就 push 不过去.
git config --global --get http.proxy
git config --global --get https.proxy
常备以上修复指令.
今天和敏行谈论了一下有关读书会的事情, 提到相比于上学期的只是摘抄数学公式的形式, 更好的处理方式可能是写成一个 Jupyter Notebook 的形式, 搭配具体的代码实现, 这样可能会更有助于理解.
修复了一堆之前遗留在 review-sheet 的问题, 打包到了一个 release 里. 如果能帮到人的话就再好不过了.
预约了一张 130 校庆的卡, 不要忘记取了.
买一送一的牛奶放在二楼冰箱里被冻硬了, 解冻之后口感难喝的一, 以后不多买了.
3.19
为今天晚上的 BCI 小会做一下准备. 梳理一下数据流维度变换.
记得修理一下博客代码复制失效的问题.
3.20
领到了 130 校庆卡, 但是估计是因为打的人太多机器有问题了, 卡面上有几个小黑点, 这又是学校是一个草台班子的力证.
修复了博客代码失效的问题, 还顺带修复了 highlight 引起渲染重影的 bug, 现在代码块应该能看了.
另外终于收到了有关于博资考的报名邮件. 感觉现在还是有点发虚, 不知道到底能不能通过.

预计 4.23-24 考试, 我在思考是不是在考试前也应该先把 Reading Group 的 Jupyter Notebook 给准备起来.
3.22
把学术规范的作业做了, 这 sb 东西感觉每周都要骂一次.
比较无语的是在用 VS Code 的 Copilot Agent 帮我来自动包裹 aligned 的时候, 竟然莫名其妙把我之前写的 Brownian motion 的细节全整没了, 不得不在下班前又重新写了一遍, 我猜这也是 Openclaw 至今不能随意信任的表现之一.
明天看下能不能把 Transformer 的 baseline 给做了.
3.23
整理一下有关于 BCI 今天的目标清单:
-
velocity prediction & 实际数据的画图对比
-
Transformer baseline 的实现
-
梳理数据流维度变换的剩余部分
好想攒钱换一个好一点的屏幕...这 1080p@60Hz 的显示器看起来眼睛废了
试用了一下 VS Code 的 Copilot Agent 来完成 prediction 的代码, 这应该是首次进行 agent coding 了. 今天把速度图画出来, 才知道预测都歪到姥姥家去了. 这还不单纯是神经元漂移引起的, 而是整个预测都显得非常糟糕. 所以模型肯定是有问题的.
可以看到模型只能大致学习到运动的趋势, 但是具体还原到速度的数值上就偏差到离谱了. 这还是选取的 Session 3 的数据, 到后面直接连趋势都没有了.
由于目前选取的 criterion 是 MSE, 导致模型更倾向于往一个 bin 内的平均值靠近, 从而导致预测出来的速度呈现以 bin 为单位的 "阶梯状", 这显然是非常荒谬的.
现在我们需要改变 masked MSE 为 criterion 的方式, 看下模型的表现能否改善.
在模型训练过程中顺便咨询了一下 AI 有关 epoch 数和过拟合的问题, 得到的答案是最好的标准是观察 validation loss 的变化, 如果 train loss 下降而 validation loss 上升, 这就说明模型开始过拟合了. zikai 可能考虑到了这一点设定了早停法为 patience=20, 但是对于 epoch=40 来说还是相当于没有(不太可能这么快就过拟合).
毫无疑问, 更复杂的 loss 计算方式就意味着更长的训练时间, 如果训练很久之后发现性能毫无进步, 那就有点好笑了.
设定新的 criterion 为
def total_loss(output, target, lengths):
B, T, C = output.shape
device = output.device
# mask
mask = torch.arange(T, device=device).expand(B, T) < lengths.unsqueeze(1)
# ===== MSE =====
mse = ((output - target) ** 2) * mask.unsqueeze(-1)
mse = mse.sum() / mask.sum().clamp(min=1)
# ===== derivative =====
pred_diff = output[:, 1:] - output[:, :-1]
tgt_diff = target[:, 1:] - target[:, :-1]
mask_diff = mask[:, 1:]
deriv = ((pred_diff - tgt_diff) ** 2) * mask_diff.unsqueeze(-1)
deriv = deriv.sum() / mask_diff.sum().clamp(min=1)
# ===== smooth =====
smooth = (pred_diff ** 2) * mask_diff.unsqueeze(-1)
smooth = smooth.sum() / mask_diff.sum().clamp(min=1)
return mse + 1.0 * deriv + 0.1 * smooth
其训练结果为
==================================================
Session | R2 (Avg) | R2 (X) | R2 (Y) | MSE
--------------------------------------------------
0 | 0.5215 | 0.3329 | 0.7100 | 0.0367
1 | 0.5000 | 0.4499 | 0.5502 | 0.0239
2 | 0.4326 | 0.2987 | 0.5665 | 0.0277
3 | 0.0233 | -0.1389 | 0.1854 | 0.0676
4 | -0.0989 | 0.0760 | -0.2738 | 0.0560
7 | -0.2523 | -0.4668 | -0.0377 | 0.0637
11 | -1.1834 | -1.7672 | -0.5996 | 0.1227
==================================================
仍然呈现出很明显的阶梯状, 而且性能也没有得到明显的提升.
训练的开销不小
现在采用了新的架构, 目前还在训练中. 但是根据 ChatGPT 诊断, 目前存在着一些隐患:
-
每次 epoch 的 step 数量很小, 这可能是
batch_size过大导致的, 也有可能是由于数据量太小导致的; -
训练时间过长, 可以考虑减小
bin长度, 或者减少k_history的长度.
训练结束. 显示的评估结果仍然比较糟糕. 这可能是 decoder 出现了问题. 阶梯型的现象仍然存在, 这表明模型欠缺对于 bin 内生成高频时间序列的能力. 我让 ChatGPT 给我生成了一个 prompt 来指挥 VS Code 的 Copilot Agent(有一种奇妙的感觉, 让 Ai 帮我指挥 Ai?!):
我目前的 POSSM 模型存在一个问题:
模型先将 spike 数据压缩成每个 bin 一个 hidden state h (shape: B, T, hidden_dim),
然后使用 decoder 将每个 bin 展开成 bin_size 个时间点(例如 50ms)。
但是现在出现的问题是:
预测的 velocity 在时间上呈现明显的“阶梯状”,说明模型只学到了每个 bin 的平均值,
而没有学到 bin 内的时间变化。
我怀疑问题在于:
当前结构中 h 是一个低时间分辨率表示(每个 bin 一个向量),
decoder 无法从中恢复高频细节。
请帮我做一个“最小侵入修改”,目标是:
1. 保留当前 backbone(GRU / S4D)结构不变
2. 保留 cross-attention 不变
3. 只修改 decoder 或 latent 表示
改动方向如下(优先考虑):
A. 增加 num_latents(例如从 1 改为 4 或 8),让每个 bin 保留多个 latent 表示,而不是压缩成一个
B. 或者让 decoder 的 query 显式包含时间信息(例如加入 time embedding,而不是固定的 output_queries)
C. 避免仅用一个 h 向量生成整个 bin 的 50 个时间点
请给出:
- 修改后的关键代码(只需要改动部分)
- 每一处修改的作用解释
- 尽量保持代码结构清晰,不要大规模重构
现在将 num_latents 从 1 增加到 4, 还有在 Output_Decoder 处加入了一些目前还没看懂的细节. 别的不说, 至少训练速度提升了很多.
今天先下班了, 明天看看训练成果怎么样.
3.24
后续可能需要开发一个读取模型节点继续训练的功能, 这样或许可以节约大量的训练时间.
论文原文用到的 Linear Readout, 到底性能有没有它所声称的那么好?
目前代码中的泛化思路是只使用 Session 0 来训练, 然后用来预测预测剩余 $1\sim 11$ 的 Session, 这种做法应该被称为 "zero-shot test", 即使原论文提到有关 session generalization 的能力, 也不应该是这样做到的.
晚上汇报大纲:
-
博资考时间已确定为 4.23-24.
-
Reading Group 排期在 5.20/27, 如果要按照 Jupyter Notebook 的形式来实现, 可能近期就要开始启动.
-
明天下午的 Reading Group 由于研究生学术日的安排无法参加.
-
目前的 BCI 进展
-
$R^{2}<0$ 的统计学理解: 预测相比于直接用平均值预测还要差
-
开发出了可视化工具用于对比 predction 和 现实速度, 相比于数字化的 $R^{2}$ 等指标能更直观地看出模型的性能. 在 Github 上添加了详细的部署和指令说明.
-
有关改进模型训练和性能的一些失败的尝试
- 最原始的版本: 只能大致学习到运动的趋势, 但是具体还原到速度的数值上就偏差到离谱. 推测由于
criterion = masked_mse_loss导致模型更倾向于往 bin 内的平均值靠近, 最后 prediction 呈现以 bin 为单位的 "阶梯型";

- 更改 criterion 为
mse + 1.0 * deriv + 0.1 * smooth, 即使训练时间大幅上升, 性能也没有出现任何提升;

- 从模型本身下手, 可能是容量不足, 于是
num_latents: 1->4->16,gru_num_layers: 1->2,k_history: 3->6, 对于提升模型的预测能力有稍微帮助, 但是生成的比较图仍然偏离严重;

- Session 间存在神经元漂移, 为此设定
dropout = 0.1来随机丢失一些 channel, 但是性能没有提升; - 减小
bin_size: 50 -> 20 尝试提高预测精细程度, 需要重新切分数据, 只是相当于从 "阶梯型" 变为了 "锯齿型". - 考虑到可能是 "zero-shot" 的训练方式不合适, 于是 agent coding 了多 Session 训练的版本, 结果 Session 1 的 $R^{2}$ 反而还下降了;
- 更换了新的 loss 计算方式之后, 发现只在某单个方向轴上出现较好的吻合, 而另一个轴的表现则会比较糟糕. 一般来说从 Session 3 开始, 性能较好的轴就会从 x 轴变为 y 轴. [Example]
a7ca2e的预测数据
- 最原始的版本: 只能大致学习到运动的趋势, 但是具体还原到速度的数值上就偏差到离谱. 推测由于
-
可能的一些猜想:
- 数据质量本身太低(Chewie CO 2016)
- 目前添加了一些项避免过于依赖 mse, 但是可能仍然不够
- 分 bin 方式读取数据本身可能相当于低通滤波, 导致无法学习到较为高频的时间序列.
- RoPE 的时序编码作用不够
- Output_Decoder 的
self.readout = nn.Linear(embed_dim, 2)读出层能力或许太低了
-
尝试一下 POYO 的跑通和实现.
-
数据的更换(目前的数据质量不足), 多个数据集的训练.
-
找相关教务老师确认一下考试的具体范围.
3.25
今天先尝试把 POYO 的代码 git clone 下来尝试跑通.
拿到了博资考的考试范围, 一共有 300 多页, 已经想似了.
3.28
找同学拿到了之前软物质的课后习题范围. 现在已经将题目完全 latex 化, 正在开始一点点啃题目.
- 流体力学
- Bernoulli 定律
- Poiseuille 定律
- 毛细重力波
- thin-flow 模型
- 弹性力学
- 受力钢板
- 梁理论(Beam theory)
- 布朗运动和胶体
- Langevin 方程导出 Diffusion 方程
- 估算凝结的能量势垒
- Debye-Hückel 势能
- 聚合物
- 理想链的回转半径(Radius of gyration)
- 混合熵的导出
- Flory-Huggins 自由能的计算
- 液晶
- Frank 自由能密度
- Splay, Twist 和 Bend
给网页加了一个 checklist 的功能.
4.1
把课后习题的解答过了一遍, 还剩了一道毛细重力波的题目没有做, 感觉这道题的难度远远大于其他题目, 准备先把剩下的题都过几遍再看下有没有时间把这道题做了.
4.2
把之前在课上过了一遍记录的瑕疵都上线修复了.
今天的 BCI 小会似乎没有什么特别的进展.
4.7
重新部署了 POYO 代码, 有一个问题: 它的 brainsets 包每次下载数据都要使用 uv 重新构造一个虚拟环境, 里面用到的 dandi 包版本太低了, 以至于我反复调试了几次. 在 Gemini 的帮助下, 需要
export PIP_CONSTRAINT=<(echo "dandi>=0.74.0")
brainsets prepare perich_miller_population_2018
或者
uv tool upgrade brainsets
uv tool update-shell
uv tool install brainsets --with "dandi>=0.74.0" --force
来强制升级 dandi 版本.
实测了一下这个办法没用, 看到 perich_miller_population_2018 的 DANDI ID 是 000048, gemini 建议我直接使用
dandi download https://dandiarchive.org/dandiset/000048
来完成数据的下载.
现在整理出了一个比较成功的 POYO 部署流程. 在完成了代码的 git clone 之后:
- 新建环境
conda create -n poyo python=3.10 -y
conda activate poyo
- 安装依赖
pip install -e .
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
- 安装数据集管理包
pip install git+https://github.com/neuro-galaxy/brainsets.git
- 下载数据
cd ./examples/poyo
brainsets prepare perich_miller_population_2018
- 模型训练
python train.py --config-name train_poyo_mp.yaml
POYO-MP 是单个 perich_miller_population_2018 数据训练的, 而 POYO-1 则需要下载所有数据集.
brainsets prepare perich_miller_population_2018
brainsets prepare churchland_shenoy_neural_2012
brainsets prepare flint_slutzky_accurate_2012
brainsets prepare odoherty_sabes_nonhuman_2017
目前是试用的 POYO-MP. 因为即使只是单个数据集, 光是数据集下载和预处理的时间也非常长了.
完成数据的预处理之后进行训练, 可能需要补充以下依赖:
pip install lightning wandb
注册 wandb 账号:
💡 Tip: For seamless cloud logging and experiment tracking, try installing [litlogger](https://pypi.org/project/litlogger/) to enable LitLogger, which logs metrics and artifacts automatically to the Lightning Experiments platform.
wandb: WARNING The anonymous setting has no effect and will be removed in a future version.
wandb: (1) Create a W&B account
wandb: (2) Use an existing W&B account
wandb: (3) Don't visualize my results
wandb: Enter your choice: 1
wandb: You chose 'Create a W&B account'
wandb: Create an account here: https://wandb.ai/authorize?signup=true&ref=models
wandb: After creating your account, create a new API key and store it securely.
wandb: Paste your API key and hit enter:
啊这, 好像爆显存了
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 3.54 GiB. GPU 0 has a total capacity of 8.00 GiB of which 0 bytes is free. Including non-PyTorch memory, this process has 17179869184.00 GiB memory in use. Of the allocated memory 17.38 GiB is allocated by PyTorch, and 2.24 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)
我的小破笔记本已经不能承担这样的训练任务了.
原仓库中提供了POYO-MP 预训练的模型权重, 或许可以先将其下载下来评估一下预测的性能.
cd ./examples/poyo/checkpoints
wget https://nyu1.osn.mghpcc.org/brainsets-public/model-zoo/poyo_mp.ckpt
修改了 custom.css, 现在代码块可以自动换行了.
4.8
计划:
- 精读 Soft Matter 液晶, 胶体和界面部分
- 继续过整理好的习题集, 特别是布朗运动和聚合物部分的补充材料部分
- *继续 agent coding POYO 的训练代码
latexworkshop 神经病吧, 更新了之后发现 ctrl+左键 的跳转功能失效了, 最后还是复原到了之前的版本才了事.
简单看了一下胶体部分的课本, 明天来处理一下这方面自己押的题目.
4.9
处理了一下胶体部分中的题目: 平行板 van der Waals 力; 双球 van der Waals 力;
今天有相当一段时间在转录题目为 Latex 上, 只完成了两道题目, 明天把 DLVO 的题目处理了, 然后复习一下布朗运动的相关知识, 防止遗忘.
4.10
处理完了胶体的课后作业, 今天收到消息说还有一个有关应力学的作业, 等等看是什么类型的题目.
完成了部分液晶章节内容的阅读, 说实话感觉后半部分的内容已经有点超过博资考的范围了. 我觉得目前重在了解, 至少问到一个概念能够答得上来.
4.11
在水课上复习了一下 Frank 自由能密度的内容, 发现了一个记忆旋度的行列式技巧, 添加到了复习资料中, 以防考试的时候没有提供对应的公式.
重新推导了一维 Random Walk 的内容, 具体到了 Stirling 近似的具体使用.
另外还有一个重点就是之前的序参量解释有一个漏洞, 现在按照参考书里的张量定义写了一遍, 并且完成了标量 $S$ 和张量 $Q_{ij}$ 意义的统一.
祝自己生日快乐.
4.12
...
4.13
准备过一遍参考书中的 流体力学, 弹性力学, 布朗运动和聚合物. 这一部分虽然练习题相对较多, 但是仍然没有梳理过大致的框架, 需要熟悉一下相关的知识概念
- 流体力学
- 弹性力学
- 布朗运动
- 聚合物
脑残教科书自己分不清楚常量和变量吗, 证明一个 Bernoulli 定律分不清楚 $p_{i}^{0}$ 是常量还是变量?
艰难地做完了不稳定性的这道题目, 明天在水课上面重新过一下之前软物质作业的内容, 现在有点遗忘了.
4.14
处理了一点不稳定性遗留的问题, 然后顺手处理了一下之前遗留的毛细重力波的题目. 现在开始过弹性力学相关的章节.
4.15
稍微复习了一下 polymers 的内容, 还缺了一点 WLC 的应力曲线, 明天再补上.
4.17
根据 Gemini 的建议, 还剩下了
- Helfrich 自由能
- Freedericksz 转变
- 胶体的 Depletion 力
- WLC 应力曲线
- 聚合物的流变学
- 欧拉屈服应力
把这些缺漏补上, 后面就是专心看准备好的资料了.
4.18
处理了 Freedericksz 转变的题目.
4.23
结束了博资考笔试. 流体力学考了一个之前完全没有接触过的题目. 这个大题的题量小占分大, 估计笔试过还是能过, 就是分数不会太好看.
后面收到钱的时候记得给张文老师发邮件确认.
准备开始着手读书会的内容.
训练的开销不小
