分类 六、编程语言 下的文章

一、docker安装

目前服务器基本上都是centos版本的,以下是centos版本安装方案
共有三种安装方式:
官方文档参考:
https://docs.docker.com/engine/install/centos/
其中在线安装,可以使用国内源,教程参考:
https://www.runoob.com/docker/centos-docker-install.html
安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

确定是否安装成功:

docker --version

二、docker调用GPU安装依赖

要注意:要想使用GPU,带部署的服务器也必须要安装以下四个依赖,不安装无法调用GPU:
需要安装4个依赖程序:

yum install -y nvidia-container-toolkit
yum -y install nvidia-container-runtime
yum -y install libnvidia-container-tools 
yum -y install libnvidia-container1

可以离线下载安装:

使用命令下载(在可联网机器下载)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo yum -y install nvidia-container-toolkit --downloadonly --downloaddir ./ yum -y install nvidia-container-runtime --downloadonly --downloaddir ./ yum -y install libnvidia-container-tools --downloadonly --downloaddir ./ yum -y install libnvidia-container1 --downloadonly --downloaddir ./
(参考:https://juejin.cn/post/7066566268379201544)
安装
sudo rpm -ivh *.rpm

三、docker启动

重启:

systemctl daemon-reload
systemctl restart docker

四、docker导入导出

导出

docker save [OPTIONS] IMAGE [IMAGE...]
-o :输出到的文件。

#将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

导人

docker load --input ./ cuda102_runtime.tar

五、 docker占满根目录解决方案

docker 默认占用根目录位置: /var/lib/docker
解决方法:移动 /var/lib/docker 并设置软连接,最后重启docker

mv /var/lib/docker /data/docker
ln -s /data/docker /var/lib/docker

systemctl daemon-reload
systemctl restart docker

六、 Docker 镜像下载

挑选需要的docker 镜像
Docker镜像链接
https://hub.docker.com
ubuntu带 cuda 的 docker 镜像下载
https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=16.04
微信截图_20231208181708.png

需要注意的重点:

1.在centos上面的程序是可以直接在ubuntu镜像下面执行的
2.如果要下载可以直接调用GPU的镜像需要下载含有cuda和cudnn的镜像
3.线上可以用推理环境的镜像:11.2.2-devel-ubuntu20.04,也可以用开发环境镜像:11.2.2-runtime-ubuntu20.04
只是大小不一样。如下图:
4.具体要下载哪个镜像要根据要部署的服务器驱动版本有关系,例如要部署的机器驱动是cuda 11.2对应的版本版本,下载的镜像最好一直,如果大于11.2版本,则无法正常启动镜像或者无法调用GPU,比11.2小的应该可以,但是没有使用。

5.下载镜像后,通过目录共享启动容器,例如:
docker run -it --shm-size="80g" -p 5012:5012 -v /data/liulei/:/data/liulei --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 /bin/bash 
可以把conda虚拟环境的目前拷贝到共享目录下面:然后通过虚拟环境的绝对python路径测试虚拟环境是否正常运行,也可以先通过
torch.cuda.is_available()来为true和false来判断GPU是否可用

82125.png

七、镜像

查看镜像:

docker images

修改镜像名称:

docker tag  imageid   name:version

八、容器

创建容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTION说明(常用):有些是一个减号,有些是两个减号
–name=“容器新名字” 为容器指定一个名称
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;也即启动交互式容器(前台有伪终端,等待交互)
-P:随机端口映射,大写P
-p:指定端口映射,小写p
例如 -p 8080:80,即容器的80端口映射到宿主机的8080端口


1.不使用显卡创建 container
docker run -it nvidia/cuda:10.2-cudnn8-runtime-ubuntu16.04 /bin/bash
2.使用显卡
docker run -it -d --shm-size="80g" -p 5000:5000 -v /home/centos/:/home/centos --gpus all belleagi/belle:v1.0 /bin/bash 


例如:
docker run -it --shm-size="80g" -p 5012:5012 -v /data/liulei/:/data/liulei --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 /bin/bash 

设置网络:
docker run --network=host -it --shm-size="80g" -p 5012:5012 -v /data/liulei/:/data/liulei --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 /bin/bash

2. 查询容器

命令:docker ps [OPTIONS]
OPTIONS说明
-a列出当前所有正在运行的容器+历史上运行过的
-i:显示最近创建过的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号

docker ps   #当前正在运行的容器
docker ps -a #显示所有容器,包括当前没有运行的容器
docker ps -a | grep "" 按照关键词查询

3、 进入容器

存在 docker attach、docker exec 两种方式。
docker attach container_id   (**注意:** 如果使用此命令,从容器退出,会导致容器的停止。)
docker exec -it container_id /bin/bash

container_id:详见 docker ps –a 命令输出结果。
docker attach 44fc0f0582d9  

4、 退出容器

exit    # run进去容器,exit退出,容器停止
ctrl+p+q  #run进去容器,ctrl+p+q退出,容器不停止

5、 启动和停止容器

1.启动已经停止的容器
docker start 容器ID或者容器名

2.重启容器
docker restart 容器ID或者容器名

3.停止容器
docker stop 容器ID或者容器名

4.强制停止容器
docker kill 容器ID或者容器名

5.删除已经停止容器
docker rm 容器ID或者容器名
注意:rmi为删除镜像 rm为删除容器

6.强制删除:没有停止的容器
docker rm -f 容器ID或者容器名



九、与宿主机拷贝文件

宿主机 -> docker
docker cp /opt/software/temp/test/test.txt f7b37b56fb98:/home
docker -> 宿主机
docker cp f7b37b56fb98:/home  /opt/software/temp/test/test.txt
f7b37b56fb98:container_id

一、centos中添加用户

1.添加用户

useradd liulei   #添加用户
passwd liulei    #添加密码
#下面的只有zhy在用,一般服务不用
usermod -aG test01 liulei  #给用户分组,注意如果不添加这个可能无法登录,将用户 liulei 添加到组test01

2.修改密码

#需要先登录root权限账户
passwd  liulei  #用户名 

3.给用户添加sudo权限

#先切换为root
#一般服务器
vim /etc/sudoers
centos   ALL=(ALL)   ALL

#zhy个别服务器
vim /etc/sudoers.d/su
centos ALL=(ALL) NOPASSWD:/bin/su -

二、gcc版本升级

yum install centos-release-scl
yum install devtoolset-8
#激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-8 bash

gcc -v

这条激活命令只对本次会话有效,重启会话后还是会变回原来的4.8.5版本,要想随意切换可按如下操作。
首先,安装的devtoolset是在 /opt/rh 目录下的,如图

每个版本的目录下面都有个 enable 文件,如果需要启用某个版本,只需要执行

source ./enable

所以要想切换到某个版本,只需要执行

source /opt/rh/devtoolset-8/enable

永久起效:

vim /etc/profile
#末尾添加
source /opt/rh/devtoolset-7/enable\

#自后重启
source /etc/profile

或者:
如需切换使用如下命令:source /opt/rh/devtoolset-7/enable   
或者$USER_HOME/.bashrc 中加入默认就切换。

三、杀进程

1.kill

ps -ef|grep python
kill -9 pid  //彻底杀死进程

2.killall

Linux killall (kill processes by name)用于杀死进程,与 kill 不同的是killall 会杀死指定名字的所有进程。kill 命令杀死指定进程 PID,需要配合 ps 使用,而 killall 直接对进程对名字进行操作,更加方便

killall -9 mysql         //结束所有的 mysql 进程

3.pkill命令
pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,除此之外,pkill 还有一个更重要的功能,即按照终端号来踢出用户登录。

pkill -f mysql         //结束 mysql 进程
pkill -u mark,danny //结束mark,danny用户的所有进程
w  //#使用w命令查询本机已经登录的用户
pkill -9 -t pts/1  //#强制杀死从pts/1虚拟终端登陆的进程

四、下安装包

  1. pip download -d 保存安装的库及其依赖库的文件夹路径 安装库名 -i 临时换源加快下载速度
    例如:pip download -d ./websocket websocket-client -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. pip install --no-index --find-links=库及其依赖库的文件夹路径 离线下载的库名称
    例如:pip install --no-index --find-links=./websocket websocket-client

ubuntu下载

五、磁盘空间、操作系统信息

1.Linux查看未挂载的磁盘空间
fdisk -l

2.Linux查看未分配磁盘
lsblk -f
3.Linux查看磁盘挂载
df -h
4.查看隐藏目录大小
du -sh .[!.]*
5.系统信息
centos版本信息:cat /etc/redhat-release
centos内核信息:cat /proc/version
centos操作系统:uname -s
centos内核类型: uname -m

六、查看centos硬件

1.top -c 命令:

top -c
# 按照GB显示
# shift 和E

GiB Mem :    251.4 total,      0.6 free,    250.5 used,      0.3 buff/cache
GiB Swap:    128.0 total,     93.4 free,     34.6 used.      0.1 avail Mem 

GiB Mem :物理内存总量(251.4G),空闲内存总量(0.6G),使用中的内存总量(250.5G),缓冲内存量
GiB Swap:交换区总量(128.0G),空闲交换区总量(93.4G),使用的交换区总量(34.6 G),可用交换取总量

(1)mem中 物理内存总量:指的是现在系统内核控制的内存数,
(2)空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心
(3)used:使用的内存量
(4)buffer/cache:用作内核缓存的内存量

Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。所以当这个数值变高的时候,说明内存是真的不够用了。

当物理内存使用完或者达到一定比例之后,我们可以使用swap做临时的内存使用。当物理内存和swap都被使用完那么就会出错,out of memory。对于使用多大比例内存之后开始使用swap,在系统的配置文件中可以通过调整参数进行修改。

swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

2、查看内存

free -h

七、查看进程所在位置

1、用ps -ef |grep xxxxx 得到该进程的pid
2、输入ls -l ,结果中 exe链接对应的就是可执行文件的路径
ls -l /proc/18283

八、删除乱码文件

系统下命令行是无法输出汉字的,如果要删除带有汉字的文件或文件夹,只需要查看文件的节点号,删除对应的节点号即可。
通过: ls -i 命令,查看文件的节点号(节点号为每个文件前面显示的数字)

查看节点

ls -i 

2093135.png

删除节点

find -inum 7516192896 -delete

九、修改path的方法

修改方法一:
export PATH=/usr/local/mongodb/bin:$PATH
//配置完后可以通过echo $PATH查看配置结果。
生效方法:立即生效
有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置
用户局限:仅对当前用户

修改方法二:
通过修改.bashrc文件:
vim ~/.bashrc
//在最后一行添上:
export PATH=/usr/local/mongodb/bin:$PATH
生效方法:(有以下两种)
1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
2、输入“source ~/.bashrc”命令,立即生效
有效期限:永久有效
用户局限:仅对当前用户

修改方法三:
通过修改profile文件:
vim /etc/profile
/export PATH //找到设置PATH的行,添加
export PATH=/usr/local/mongodb/bin:$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”
生效方法:系统重启
有效期限:永久有效

防火墙

1.查看当前防火墙状态:
firewall-cmd --state
2.开启防火墙
systemctl start firewalld
service firewalld start
3.关闭防火墙:
systemctl stop firewalld
service firewalld stop

json.load()json.loads()json.dump()json.dumps() 是 Python 中 json 模块提供的方法,用于处理 JSON 数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。下面是这些方法的具体区别:

  1. json.load()

    • 这个方法用于从文件对象中读取 JSON 数据。
    • 它接受一个文件对象作为参数,并将其内容解析为 Python 对象(通常是字典或列表)。
    • 使用 json.load() 时,你需要先打开一个文件,并将其文件对象传递给这个方法。

示例:

import json

with open('data.json', 'r') as file:
    data = json.load(file)
  1. json.loads()

    • 这个方法用于从字符串中解析 JSON 数据。
    • 它接受一个 JSON 格式的字符串作为参数,并将其解析为 Python 对象。
    • json.load() 不同,json.loads() 处理的是字符串而不是文件对象。

示例:

import json

json_str = '{"name": "John", "age": 30}'
data = json.loads(json_str)
  1. json.dump()

    • 这个方法用于将 Python 对象写入文件对象,并将其转换为 JSON 格式的字符串。
    • 它接受两个参数:要序列化的 Python 对象和文件对象。
    • 使用 json.dump() 时,你需要先打开一个文件,并将其文件对象传递给这个方法。

示例:

import json

data = {"name": "John", "age": 30}
with open('data.json', 'w') as file:
    json.dump(data, file)
  1. json.dumps()

    • 这个方法用于将 Python 对象转换为 JSON 格式的字符串。
    • 它接受一个要序列化的 Python 对象作为参数,并返回一个 JSON 格式的字符串。
    • json.dump() 不同,json.dumps() 返回的是字符串而不是写入文件。

示例:

import json

data = {"name": "John", "age": 30}
json_str = json.dumps(data)
print(json_str)

总结来说,loadloads 是用来解析 JSON 数据的,区别在于 load 从文件对象读取,而 loads 从字符串读取。dumpdumps 是用来序列化 Python 对象为 JSON 数据的,区别在于 dump 将数据写入文件对象,而 dumps 返回 JSON 格式的字符串。

一、Cython

用cython是将.py文件转化为.so文件,这样加密的可靠性非常高,无法被被人破解,也就很好地保护了源代码。

1.环境准备

安装cython,以及gcc编译环境

pip install cython
yum install -y gcc python-devel
2.编译脚本
  1. 编写compile.py文件,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
    ext_modules = cythonize("test.py")
)

2.然后运行

python compile.py build_ext --inplace

1.创建、启动虚拟环境

conda create -n  env_name python=3.7 
conda activate env_name

如果出现如下类似错误:

nvalidArchiveError(‘Error with archive /usr/local/Anaconda3/pkgs/sqlite-3.36.0-hc218d9a_0stdo5ow0/info-sqlite-3.36.0-hc218d9a_0.tar.zst. You probably need to delete and re-download or re-create this file. Message from libarchive was:\n\nCould not unlink’)
————————————————

解决办法:
找到对应的pkgs包,赋权限777即可

sudo chmod -R 777 /usr/local/Anaconda3/pkgs/

2.查看虚拟环境用户

conda env list

3.查看安装软件版本

conda list

conda 安装torch等

参考:https://pytorch.org/get-started/previous-versions/

# 先创建虚拟账户然后
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=10.2 -c pytorch

默认国外源,安装太慢,修改源:
将以上配置文件写在~/.condarc中
vim ~/.condarc

  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
ssl_verify: true