Fang's Blog - 科研
type: channel
link: https://blog.xcuda.de/category/research/
items: 快捷设置cuda的版本
items: torch_sparse,torch_scatter,torch_cluster安装
items: 安装Pytorch cuda版本最不会错的方法
items: Pytorch判断是否支持cuda
items: 指定服务器上的CUDA版本
items: 深度学习复杂训练的字典设置
items: Anaconda环境处理的常用命令
items: Pytorch lightning 意外退出导致内存占用解决

快捷设置cuda的版本
type: item
date: 2025-08-08T20:48:56+08:00
description: 在这篇文章当中，介绍了如何在机器上查看可以使用的cuda版本，同时有暂时更换cuda的方法以及永久更换cuda的方法。但是无论是哪种，都需要手动输入命令。于是我让ai写了一个脚本，能够通过运行脚本快速地更换cuda版本：首先还是需要查看机器能够使用的cuda有哪些：nvcc -V然后脚本内容如下：# Accept version as parameter, default to 111 if not provided CUDA_VERSION=${1:-111} # Format the version with a dot before the last digit (e.g., 113 -> 11.3) FORMATTED_VERSION=$(echo $CUDA_VERSION | sed 's/\(.*\)\(.\)$/\1.\2/') # Set environment variables export CUDA_HOME=/usr/local/cuda-$FORMATTED_VERSION export PATH=$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH echo "CUDA environment set to version $FORMATTED_VERSION"复制内容并粘贴在sh文件中，运行时假如想使用11.7cuda，那么采用如下的命令：source set_cuda.sh 118注意source非常重要，因为如果不source则会开一个新的终端完成脚本文件中内容，而非在当前的终端

torch_sparse,torch_scatter,torch_cluster安装
type: item
date: 2025-06-30T13:06:46+08:00
description: 做3D生成经常需要torch_cluster进行fps操作，但是直接通过pip install torch_cluster或者是conda install torch_cluster通常非常慢而且还不一定能装上（好像是编译问题），这个时候就需要去对应的网站上进行下载。网址在这。进入页面之后应该是这样的：首先通过Ctrl+F搜索torch版本进行筛选，然后点击进入网页。cp代表python版本，根据python版本选择对应的，然后右键点击并复制链接然后通过wget + [链接]下载到本地，然后运行pip install x.whl进行安装。

安装Pytorch cuda版本最不会错的方法
type: item
date: 2025-03-20T18:22:23+08:00
description: 为了安装pytorch，通常都会直接从官网的命令下载，然而官网的命令通过anaconda的解析，很有可能会安装错版本，这个时候需要我们自己通过pip安装对应的版本。注意，在安装时最好置于外网环境下。查询cuda版本通过命令[scode type="share"]nvcc -V[/scode]查询当前的cuda版本为11.8。确认当前环境下python版本python --version这里举例为python 3.9在网址中找到对应pytorch/torchvision/torchaudio版本访问网址为：https://download.pytorch.org/whl/{你的CUDA版本}例如说cuda为11.8，那么就访问：https://download.pytorch.org/whl/cu118会进入如下的链接：其中点击不同的路径可以进入不同的包选择版本，以pytorch为例：里面有很多内容，可以使用Ctrl+F进入搜索特定版本，例如说torch-1.9.1。因为我是python 3.9，因此找到cp39，然后linux_x86_64，然后找到文件。通过命令行安装也可以通过命令行安装：pip install torch==1.9.0+cu118 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118程序会自动寻找最合适的版本，pytorch的版本最好设定一下。

Pytorch判断是否支持cuda
type: item
date: 2025-03-20T17:54:47+08:00
description: 网上已经有很多了，记录在这里主要是方便查询和一键搜索假设对于如下环境来说：那么首先用python命令进入python命令行格式，然后用行如下指令：import torch print(torch.cuda.is_available())然后得到返回为True即代表支持cuda。

指定服务器上的CUDA版本
type: item
date: 2025-03-20T16:52:00+08:00
description: 实验室经常需要大家共用一个服务器，因此不同实验者有不同的cuda需求，况且同一个人在不同项目下也有不同的cuda需求，因此需要更换cuda。查询当前版本首先通过下面命令查询当前的cuda版本：nvcc -V得到如下结果代表当前的版本是11.8查询可更换版本因为安装cuda是需要root的，如果自身没有root，则需要查看有哪些cuda可用。一般实验机器都有安装多个版本。通过这个命令来查询可更换版本。ls -l /usr/local | grep cuda得到结果如下：这就说明有一系列的11和12cuda可用更换相应的cuda版本有两种更换模式，例子更换11.7暂时更换export CUDA_HOME=/usr/local/cuda-11.7 export PATH=$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH输入后再nvcc -V会得到：更换成功永久更换（谨慎）通过写入bashrc文件可以永久更换，也就是说每次终端开始的时候都会更换，需要确认是否有这个需求：echo "export CUDA_HOME=/usr/local/cuda-11.7" >> ~/.bashrc echo "export PATH=$CUDA_HOME/bin:$PATH" >> ~/.bashrc echo "export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc然后运行：source ~/.bashrc # 使修改生效

深度学习复杂训练的字典设置
type: item
date: 2025-03-07T14:03:00+08:00
description: 在人工智能的训练中，可能存在很多参数，其中一些是默认参数（如数据的路径，保存checkpoint的训练轮数，batchsize等等），也有一些是针对某个训练使用的参数（如读取数据的分辨率，读取的类别条件）。在过去的代码中，一个普遍的解决方法是：使用BaseOption, TrainOption, 和TestOption。其中TrainOption和TestOption继承BaseOption。而Openai的代码提供了一个新的思路。很难直接说谁的更好，记录一下。1. 前置条件首先要知道在python中，字典可以在被**后作为函数的参数传入，函数会自行在被传入的众多参数里面找到自己要的。例如说：Big_parameter_sets = dict{a=1, b=2, c=3} def Small_function(a, b): return a+b output = Small_function(**Big_parameter_sets) 可以发现Small_function这个函数并没有完全用到abc三个参数，总之，字典的键要和参数名同名，且是该函数的母集。2. 具体过程在主函数里，代码这样得到参数的：args = create_argparser().parse_args()可以看到create_argparser这个函数返回了一个parser，然后这个parser的类再调用parse_args函数，然后得到传递的参数。于是我们找到create_argparser这个函数。def create_argparser(): defaults = dict( data_dir="", schedule_sampler="uniform", lr=1e-4, weight_decay=0.0, lr_anneal_steps=0, batch_size=1, microbatch=-1, ema_rate="0.9999", log_interval=10, save_interval=10000, resume_checkpoint="", use_fp16=False, fp16_scale_growth=1e-3, ) defaults.update(sr_model_and_diffusion_defaults()) parser = argparse.ArgumentParser() add_dict_to_argparser(parser, defaults) return parser其中的defaults这个字典，有一个神经网络最基础的一些参数：数据路径，学习率，权重缩减……接下来，使用字典类的一个方法：update。这个方法有点像合并两个字典，字典来自于一个叫做sr_model_and_diffusion_defaults的函数，于是再找到这个函数。def sr_model_and_diffusion_defaults(): res = model_and_diffusion_defaults() res["large_size"] = 256 res["small_size"] = 64 arg_names = inspect.getfullargspec(sr_create_model_and_diffusion)[0] for k in res.copy().keys(): if k not in arg_names: del res[k] return res这里一个函数model_and_diffusion_defaults的输出被赋给了res这个变量，因为嵌套了太多函数，这个函数就不再写在这里，这个函数的本质也是直接返回了一个字典。之后又把256赋给了”large_size”这个键，把64赋给了”small_size“这个键。接下来一句话比较少见：arg_names = inspect.getfullargspec(sr_create_model_and_diffusion)[0]这句话的目的就是 获得sr_create_model_and_diffusion这个函数的所有参数（使用[0]的原因）。这个函数配合接下来的for循环的目的是删除res 中所有不是sr_create_model_and_diffusion的参数的键还有它的值。总的来说，这里的目的是：因为我们最终需要跑的是sr_create_model_and_diffusion这个函数，而model_and_diffusion_defaults这个函数提供的参数和我们跑的函数间是交集的关系，因此删除这些键值对可以减少内存的占用，但是我个人认为如果字典只有几十或者十几个键值对，这种操作其实没有很大的必要性。于是我们返回res，并把它和defaul…

Anaconda环境处理的常用命令
type: item
date: 2025-03-06T18:31:00+08:00
description: 1. 查看所有环境conda env list会得到下面的结果：2. 创造环境（设定python版本）有的时候不想安装最新的python，所以可以设定：conda create --name myenv python=3.10 其中myenv为创建的环境名称3. 彻底删除某个环境conda remove -n myenv --all

Pytorch lightning 意外退出导致内存占用解决
type: item
date: 2025-03-06T18:17:20+08:00
description: pytorch ligntning是一个便利训练分布式模型的模块化库。只需要写好training_step就可以训练。然而，其经常使用shm，也就是shared memory存储多进程数据。当程序意外结束的时候，会占用/dev/shm空间。经过df -h后可以看到：如果这里Available的非常少，就意外退出的程序占用了，这个时候我们需要删除之前占用的。首先通过下面命令删除/dev/shm中属于我自己的文件。find /dev/shm -user shizhen -exec rm -rf {} \;然后同时还要kill掉 deleted的进程，否则无法释放：lsof | grep deleted | awk '{print $2}' | xargs kill -9然后就能看到内存占用在一点一点地降低。