在civitai 用token下载模型
wget -O epiCRealismXL.safetensors "https://civitai.com/api/download/models/324088?&token=YOUR-TOKEN-HERE” --content-disposition
在Linux 系统中使用 kaggle 下载数据
参考此链接链接
kaggle datasets download <USER_NAME>/<DATASET_NAME>
在linux中下载huggingface上的模型
参考此链接
### 第一种方法
git lfs install
git clone git@hf.co:<MODEL ID> # example: git clone git@hf.co:bigscience/bloom
对于huggingface gated models: 参考此链接
### 第二种方法,针对huggingface gated models
#models
huggingface-cli download --resume-download THUDM/chatglm-6b --local-dir model
#dataset
huggingface-cli download --repo-type dataset --resume-download wikitext --local-dir wikitext
#可以添加 --local-dir-use-symlinks False 参数禁用文件软链接,这样下载路径下所见即所得,详细解释请见上面提到的教程。
python import 上上上级包
参考此链接链接
Linux 安装Jupyter notebook 并开启远程访问
参考此 链接
IPDB
使用IPDB调试代码, 参考这篇blog
Git
使用Git上传密码到github,参考这篇blog
使用git add 添加了大文件,参考这篇blog, 通过git rm --cached file
以及git commit --amend -C HEAD
删除。
git config
git status
git 删除分支相关命令,参考这篇博客blog
在linux 中比较两个文件夹 diff dir1 dir2
参考此链接
tmux
关于tmux的使用,参考这篇blog
模型训练调参技巧
关于train_loss eval_loss 的各种情况,参考这篇blog
谷歌大脑的深度学习调参手册,参考这篇github
服务器
服务器连外网命令,curl ‘http://10.3.8.211/login’ --data “user=xxxx&pass=xxxxxxx&line=”
下载google drive files using wget: 使用方式链接
查看是谁在用:py3smi -l 4
https://github.com/fbcotter/py3nvml
服务器上下载或上传文件:python http.py ,然后在浏览器端使用http://服务器ip地址:8000访问即可
两个服务器间复制:scp -r username@ip:/home/work/Simnet/utils Simnet/
查看GPU使用情况 nvidia-smi
查看进程 ps -ef
删除当前目录所有文件: rm -f *
删除目录以a开头的所有文件:rm -rf /home/myuser/a*
查找替换:%s/foo/bar/gc
查找历史命令: history | grep (python)
json文件格式化: %!python -m json.tool
杀掉目前hold的所有程序:kill -9 jobs -ps
杀掉multi-gpu的程序
$ kill $(ps aux | grep YOUR_TRAINING_SCRIPT.py | grep -v grep | awk '{print $2}')
查找并杀掉僵尸进程:参考链接链接
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件. tee file1
查找文件:find . -name simplify_dataset.py 在当前文件夹下查找名字为simplify_dataset.py的文件
查看当前文件占用内存情况:du -h --max-depth=1
查看当前user占用内存情况:du -sh ~
查看每个user占用内存情况:sudo du -sh /home/* | sort -rh
查看每个disk的使用率以及剩余容量:df -h
conda clean的使用方法 conda瘦身利器:
#删除从不使用的包
conda clean --packages
#删除tar包
conda clean --tarballs
#删除索引缓存、锁定文件、未使用过的包和tar包
conda clean -a
nohup命令输出到指定文件
nohup ./start.sh >output 2>&1 & output是输出文件
vim 尝试出来的命令
shift + 3# 可以实现光标单词的快速查找
只按 > .键可以实现光标所在行到最近的注释行之间所有行的注释
Tensor, numpy, list, Variable之间的互相转换
- CPU tensor转GPU tensor:
cpu_imgs.cuda()
- GPU tensor 转CPU tensor:
gpu_imgs.cpu()
- numpy转为CPU tensor:
torch.from_numpy( imgs )
- CPU tensor转为numpy数据:
cpu_imgs.numpy()
- note:GPU tensor不能直接转为numpy数组,必须先转到CPU tensor。
- 如果tensor是标量的话,可以直接使用 item() 函数(只能是标量)将值取出来:
print loss_output.item()
- 将numpy转换为Variable
sub_va = Variable(torch.from_numpy(sub_img))
- 将Variable张量转化为numpy
sub_np2 = sub_va.data.numpy()
Linux卸载工具
$pip install pip-autoremove
$pip-autoremove -h
Usage: pip-autoremove [OPTION]... [NAME]...
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-l, --list list unused dependencies, but don't uninstall them.
-L, --leaves list leaves (packages which are not used by any others).
-y, --yes don't ask for confirmation of uninstall deletions.
Anaconda
Anaconda 常用命令
$ # 创建一个名为tensotflow的环境,指定Python版本是2.7(不用管是2.7.x,conda会为我们自动寻找2.7.x中的最新版本)
$ conda create --name tensotflow python=2.7 # 这里的--name可以简化为-n
$ source activate tensotflow # 安装好后,使用activate激活某个环境
$ # 激活后,会发现terminal输入的地方多了tensotflow 的字样
$ # 此时,可以安装和操作一些包
$ source deactivate tensotflow # 如果想返回普通环境,运行
$ conda remove --name tensotflow --all # 删除一个已有的环境
$ # conda的包管理类似pip
$ conda install scipy # conda安装scipy
$ conda list # 查看已经安装的packages
$ conda list -n tensotflow # 查看某个指定环境的已安装包
$ conda search numpy # 查找package信息
$ conda install -n tensotflow numpy # 安装某个指定环境的package
$ # 如果不用-n指定环境名称,则被安装在当前活跃环境,也可以通过-c指定通过某个channel安装
$ conda update -n tensotflow numpy # 更新package
$ conda remove -n tensotflow numpy # 删除package
Conda
pytorch和conda对应版本关系
点击这里
查看conda信息需要用到的命令:
which -a conda
conda info
conda config --show-sources
conda info --envs
安装固定版本和固定cuda版本的pytorch
conda install pytorch==1.4.0 cudatoolkit=10.0 -c pytorch
查看CUDA版本
#Method 1
cat /usr/local/cuda/version.txt
#Method 2
nvidia-smi
#Method 3
nvcc -V
#Method 4
ipython
import torch
torch.version.cuda
查看 cuDNN 版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
查看 torch安装的CUDA 和 cuDNN 版本
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.backends.cudnn.version())
Conda降级pytorch版本或安装指定版本pytorch
如果你是使用conda包管理,你可以很容易实现版本降级,你只需要指定版本即可:
# 比如你想降级到以前的v0.1.10版本
conda install pytorch=0.1.10 -c soumith
查看python版本
python -V
查看conda版本
conda -V
Linux
查看一个文件详细信息 stat filename
vim
vim设置行号 set number
vim取消行号 set unnumber
循环读取文件末尾 tail -f filename
VIM 复制一个单词
1.光标移动到aaa的开头,按 v 按e 按y
2.光标移动到bbb的开头,按 v 按e 按p
也就说,快速选中一个单词,按v按e即可。
Vim 多行注释
- 首先按 esc 进入命令行模式下,按下 Ctrl + v ,进入列(也叫区块)模式;
- 在行首使用上下键选择需要注释的多行;
- 按下键盘(大写) “I” 键,进入插入模式;
- 然后输入注释符( “//”、“#” 等);
- 最后按下 “Esc” 键。
vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率。
1.多行注释:
1). 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
2). 在行首使用上下键选择需要注释的多行;
3). 按下键盘(大写)“I”键,进入插入模式;
4). 然后输入注释符(“//”、“#”等);
5). 最后按下“Esc”键。 注:在按下esc键后,会稍等一会才会出现注释,不要着急~~时间很短的
2.删除多行注释:
1). 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
2). 选定要取消注释的多行;
3). 按下“x”或者“d”. 注意:如果是“//”注释,那需要执行两次该操作,如果是“#”注释,一次即可
3.多行删除
1).首先在命令模式下,输入“:set nu”显示行号;
2).通过行号确定你要删除的行; 3.命令输入“:32,65d”,回车键,32-65行就被删除了,很快捷吧
如果无意中删除错了,可以使用‘u’键恢复(命令模式下)
- 其他方法介绍:
法一:
单行删除,:1(待删除行)d
多行删除 ,:1,10d
法二:
光标所在行,dd
光标所在行以下的N行,Ndd
方法1:
光标放到第6行,
输入:2yy
光标放到第9行,
输入:p
此方法适合复制少量行文本的情况,复制第6行(包括)下面的2行数据,放到第9行下面。
方法2:
命令行模式下输入
6,9 co 12
复制第6行到第9行之间的内容到第12行后面。
光标移动
1.快速至当前行的行首;
- Home键; 2) 数字0; 3) 符号^;
2.快速至当前行的行尾使用$;
- End键; 2) 符号 3)n+符号 3)n+符号 表示当前行开始的第(n-1)行行尾;
3.快速至某行;
1)冒号(:)+行号+回车; 2)行号+gg; 3) 行号+G(注意大写);
4.快速至最后一行;
- 冒号(:)+$+回车; 2) 大写字母G; 3) shift+G(同2);
5.删除n个字符:
n+x
当前字符为第一个要删除的字符;
6.当前行新增一行内容;
一般模式下按大写字母O,则在当前行(即当前行内容之前)新增一行,且为插入模式(Insert Mod);
复制粘贴剪切
-
选定文本块。使用v进入可视模式,移动光标键选定内容。
-
复制的命令是y,即yank(提起) ,常用的命令如下:
y 在使用v模式选定了某一块的时候,复制选定块到缓冲区用;
yy 复制整行(nyy或者yny ,复制n行,n为数字);
y^ 复制当前到行头的内容;
y$ 复制当前到行尾的内容;
yw 复制一个word (nyw或者ynw,复制n个word,n为数字);
yG 复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾) -
剪切的命令是d,即delete,d与y命令基本类似,所以两个命令用法一样,包括含有数字的用法.
d 剪切选定块到缓冲区;
dd 剪切整行
d^ 剪切至行首
d$ 剪切至行尾
dw 剪切一个word
dG 剪切至档尾 -
粘贴的命令式p,即put(放下)
p 小写p代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面
P 大写P代表贴至游标前(上)
整行的复制粘贴在游标的上(下)一行,非整行的复制则是粘贴在游标的前(后)
注:
在正则表达式中,^表示匹配字符串的开始位置,$表示匹配字符串的结束位置。
命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。使用英文句号"."可以重复上一个命令。
在复制粘贴时,另一组常用的命令是u(撤销操作),U(撤销某一行最近所有修改),Ctrl+R(重做),这些功能主要是vim中的,vi中略有差别
压缩与解压缩
tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName.bz
解压到固定文件夹 : tar jxvf FileName.tar.bz2 -C DirName
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
Linux 压缩包解压后撤销(undo unzip & tar)
zip
zipinfo -1 path/xx.zip | xargs rm -rf
tar
tar -tf xx.tar | xargs rm -rf
tensorflow 转换成pytorch等价函数
tf.sign = torch.sign
tf.abs = torch.abs
tf.reduce_max = torch.max
tf.reduce_sum = torch.sum
tf.reduce_mean = torch.mean
length = tf.cast(length, tf.int32)与length=length.type(torch.IntTensor)相同
tf.shape() = torch.size()
tf.sequence_mask() == torch.masked_select()
tf.einsum() = torch.einsum()
tf.nn.softmax() = nn.Softmax()
Python常用命令
re 匹配一个或多个空格包括tab:\s+|\t+
arxiv中文域名: http://cn.arxiv.org/
导入上级目录:
pytorch
PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。
有如下两种方法来指定需要使用的GPU。
- 类似tensorflow指定GPU的方式,使用CUDA_VISIBLE_DEVICES。
1.1 直接终端中设定:
CUDA_VISIBLE_DEVICES=1 python my_script.py
1.2 python代码中设定:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
见网址:http://www.cnblogs.com/darkknightzh/p/6591923.html
- 使用函数 set_device
import torch
torch.cuda.set_device(id)
该函数见 pytorch-master\torch\cuda_init_.py。
不过官方建议使用CUDA_VISIBLE_DEVICES,不建议使用 set_device 函数。
3. 还有一种自己发现的方法
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")
通过这个方法可以直接将device指定在cuda1上
判断一个tensor是否在cuda上:
tensor.is_cuda
判断一个tensor在哪个GPU上:
device = tensor.device
查看当前在哪个GPU上
print("device:",torch.cuda.current_device())
Linux修改PATH环境变量的四种方式,每种方式有不同的权限。以添加mongodb server变量为列
1.修改临时型的PATH
查看PATH:echo
P
A
T
H
修改方法一:
e
x
p
o
r
t
P
A
T
H
=
/
u
s
r
/
l
o
c
a
l
/
m
o
n
g
o
d
b
/
b
i
n
:
PATH 修改方法一:export PATH=/usr/local/mongodb/bin:
PATH修改方法一:exportPATH=/usr/local/mongodb/bin:PATH
//配置完后可以通过echo $PATH查看配置结果。
生效方法:立即生效
有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置。
用户局限:仅对当前用户
2.修改当前用户的PATH
通过修改.bashrc文件:vim ~/.bashrc
//在最后一行添上:export PATH=/usr/local/mongodb/bin:$PATH
生效方法:(有以下两种)
1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
2、输入“source ~/.bashrc”命令,立即生效
有效期限:永久有效
用户局限:仅对当前用户
3.修改所有用户的PATH
通过修改profile文件:vim /etc/profile/export PATH
//找到设置PATH的行,添加:
export PATH=/usr/local/mongodb/bin:$PATH
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户
4.修改系统环境的PATH
通过修改environment文件:vim /etc/environment
在PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"中加入入“:/usr/local/mongodb/bin”
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户
Docker使用方法
看这两个链接就可:
1.入门教程:Docker入门教程
2.一小时入门教程: 只要一小时,零基础入门Docker
numpy两个对象之间的相互转化
对于两个对象之间的相互转化,在两个对象的生成中就讲过了。这里再次总结下。
从array()函数到mat()函数用np.asmatrix()或np.mat()
从mat()函数到array()函数用np.asarray()
Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix区别与特点
点此链接
Install Cuda with root
wget http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.28_linux.run
chmod +x cuda_7.0.28_linux.run
./cuda_7.0.28_linux.run -extract=`pwd`/nvidia_installers
cd nvidia_installers
sudo ./NVIDIA-Linux-x86_64-346.46.run
sudo modprobe nvidia
sudo ./cuda-linux64-rel-7.0.28-19326674.run
Install Cuda without root
查看linux系统信息
查看Linux内核版本信息
方法1:登陆Linux,在终端输入
cat /proc/version
方法2:登陆Linux,在终端输入
uname -a
方法3:登陆Linux,在终端输入
uname -r
查看Linux系统版本信息
方法1:登陆Linux,在终端输入
cat /etc/issue
方法2:登陆Linux,在终端输入
cat /etc/lsb-release
方法3:登陆Linux,在终端输入
lsb_release -a
创建一个全新的环境
#事先准备工作
#1.先通过以下命令找到当前cuda文件位置
dpkg -L nvidia-cuda-toolkit | grep version
#2.然后通过以下命令找到CUDA版本
#需要说明一点:安装时需要的cuda版本不是从nvidia-smi命令看到的CUDA的版本,
#而是从以下命令找到的CUDA的版本,因为安装pytorch跟系统的cuda版本无关,
#跟系统的驱动有关(具体的解释可以参考这个链接:https://www.cnblogs.com/Wanggcong/p/12625540.html)
cat /usr/lib/cuda/version.txt
#3.找到CUDA对应版本的pytorch,从以下链接找
https://pytorch.org/get-started/previous-versions/
1.安装anaconda
参考链接安装最新版本conda
https://docs.conda.io/projects/conda/en/latest/user-guide/install/linux.html
2.安装pytorch
根据准备工作中的第3步找到的对应的pytorch的版本,如下,安装pytorch
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch
另一些reference
#如何查找一个NVIDIA CUDA version
https://www.cyberciti.biz/faq/how-to-find-the-nvidia-cuda-version/
#pytorch版本,cuda版本,系统cuda版本查询和对应关系
https://www.cnblogs.com/Wanggcong/p/12625540.html
#在一个全新Ubuntu环境中如何安装Pytorch 1.7, CUDA 11.1的环境
https://fmorenovr.medium.com/set-up-conda-environment-pytorch-1-7-cuda-11-1-96a8e93014cc
####### 查看内存占用情况的代码
import torch
import pynvml
import psutil
import objgraph
def get_avaliable_memory(device):
if device==torch.device('cuda:0'):
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0) # 0表示第一块显卡
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
ava_mem=round(meminfo.free/1024**2)
print('current available video memory is' +' : '+ str(round(meminfo.free/1024**2)) +' MIB')
elif device==torch.device('cpu'):
mem = psutil.virtual_memory()
print('current available memory is' +' : '+ str(round(mem.used/1024**2)) +' MIB')
ava_mem=round(mem.used/1024**2)
elif device==torch.device('cuda:1'):
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(1) # 0表示第一块显卡
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
ava_mem=round(meminfo.free/1024**2)
print('current available video memory is' +' : '+ str(round(meminfo.free/1024**2)) +' MIB')
elif device==torch.device('cuda:2'):
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(2) # 0表示第一块显卡
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
ava_mem=round(meminfo.free/1024**2)
print('current available video memory is' +' : '+ str(round(meminfo.free/1024**2)) +' MIB')
elif device==torch.device('cuda:3'):
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(3) # 0表示第一块显卡
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
ava_mem=round(meminfo.free/1024**2)
print('current available video memory is' +' : '+ str(round(meminfo.free/1024**2)) +' MIB')
return ava_mem
print("cuda0:", get_avaliable_memory(torch.device('cuda:0')))
print("cuda1:", get_avaliable_memory(torch.device('cuda:1')))
print("cuda2:", get_avaliable_memory(torch.device('cuda:2')))
print("cuda3:", get_avaliable_memory(torch.device('cuda:3')))
DistributedDataParallel
清空cuda内存:torch.cuda.empty_cache()