一日多技,技能-Linux-Python 006

2022-10-31 08:44:03 浏览数 (1)

Linux

“1、vim 操作:光标快速移动到行首/行尾? ”

在非编辑模式下(一般按 ESC 进入非编辑模式):

  • 0键移动到行首
  • $键(shift 4)移动到行尾

“2、shell 脚本传递参数? ”

创建镜像后如果快速运行镜像,docker run 有很多参数,只有少部分会修改,如果每天创建很多容器,每次都完整输入一次命令就很麻烦,容易出错,这时我们可以写一个 shell 脚本,把会修改的值变成参数,然后运行脚本的时候传递会变的参数即可。

  • 脚本内容
代码语言:javascript复制
docker run -it --rm --gpus all -p $1:5901 $2 bash
  • 简单解释下
代码语言:javascript复制
docker run 使用镜像创建容器并运行

-it 交互模式运行

--gpus all 使容器内可以调用本地gpu

-p $1:5901 建立本地和容器内的端口映射,本地端口 $1 是脚本的第一个参数,可以启动的时候自定义;5901是容器内的端口,作用:在容器内启动服务部署到5901端口,就可以在本地 通过 localhost:$1 访问了

$2 第二个参数,镜像名称:tag 或者 镜像id
bash 使用 bash 终端

有人可能会好奇,为什么第一个参数不是

0 ,因为 shell 脚本中

0 表示脚本的文件名称,$1 开始才是我们指定的参数。

  • 操作起来

用 vim 新建一个run.sh文件,将上面的脚本内容写入,然后保存文件,再给文件赋予可执行权限。

代码语言:javascript复制
vim run.sh
chmod  x run.sh

下次我们要docker run 创建并运行容器的时候,就可以直接用我们新建的这个脚本了。

代码语言:javascript复制
./run.sh 本地端口 镜像id
# 如 ./run.sh 5901 42f1d7451649

完美。

“3、unzip 解压乱码怎么办? ”

unzip 解压一个 zip 资源文件,解压出来的文件名称都乱码了(如上图)。这种情况,一般是压缩包编码问题导致,在 unzip 时添加 -O 参数,参数值为:cp936(cp936 即 code page 936(代码页936)是以GBK(国标扩展字符集)为基础的编码)。

代码语言:javascript复制
unzip -O cp936 案例2资源-1663747915.zip 

Python

“1、'ConfigDict' object has no attribute 'device' ”

运行 mmdetection demo的时候出现标题中错误,在 mmdetection/demo/MMDet_InstanceSeg_Tutorial.ipynb 的Train a new detector的第一个代码块中 加入:cfg.device='cuda'

代码语言:javascript复制
from mmdet.datasets import build_dataset
from mmdet.models import build_detector
from mmdet.apis import train_detector


# Build dataset
datasets = [build_dataset(cfg.data.train)]

# Build the detector
model = build_detector(cfg.model)

# Add an attribute for visualization convenience
model.CLASSES = datasets[0].CLASSES

# Create work_dir 
'''
这里加入
'''
cfg.device='cuda'
mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir))
train_detector(model, datasets, cfg, distributed=False, validate=True)

参考:https://github.com/open-mmlab/mmdetection/issues/7901

“2、Cuda11.3 安装 tensorflow1.15? ”

tensorflow 官网中,tf1.15 只支持cuda10.0(也就是官方给你编译好的包只有基于cuda10.0的),而较新的显卡(比如 安培系列,A2000 A40等),只支持 cuda 11及以上。

如果想在 安培系列 显卡上使用 tf1.15,就只有自己重新编译安装 tf(不一定能成功,还贼麻烦),这里给大家分享一种方法:安装:nvidia tensorflow,这是英伟达官方出的一个开源项目,支持在 cuda11 上安装使用 tf1.15,与官方的 TensorFlow 1.15版本兼容。

安装要求:

代码语言:javascript复制
- Ubuntu 20.04 或者更高版本
- 显卡算力大于等于5.2
- 有 GPU 显卡,安装了 cuda11 或者更高版本和对应的 NVIDIA 显卡驱动 
- Python 3.8
- pip 19.0 or later

除了必须有显卡,安装了显卡驱动和cuda,其他的也可以不一致,这样需要自己编译安装,具体方法参考:https://github.com/NVIDIA/tensorflow#build-from-source

如果按官方指定配置来,就简单多了,直接从官方源下载安装编译好的 whl 包即可。

代码语言:javascript复制
pip install nvidia-pyindex
pip install nvidia-tensorflow

今天分享就这些啦,希望对大家有所帮助,这是一个新栏目,总结下每天遇到的问题,记录分享给大家。

欢迎大家分享下自己每天遇到的问题和解决方法,每周我会从留言中选一些汇总起来,形成一期:〈读者:一日多技〉

0 人点赞