搭建Docker私有仓库
Harbor简介
VMware开源的企业级Registry项目Harbor,以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,主要特点:
基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
RESTful API - ...
「docker」构建CUDA镜像
背景
实验室的服务器内核版本太老了,有一个项目需要升级内核,但是服务器上还有一堆东西不敢随便升级。
于是就准备用docker构建一个镜像,安装CUDA和Python环境,平时ssh连进去炼丹
需求
炼丹必备的cuda肯定是必不可少的,ssh服务器也需要配置,既然准备写一个dockerfile,那python环境和换源之类的也就一块打包到镜像里去得了。
以后谁想炼丹直接新建一个容器,映射好端口之后容器里炼丹的基础设施就都有了。
安装
宿主机安装CUDA驱动
想要容器能用CUDA,宿主机肯定要安装CUDA驱动,这部分就不讲了,好多博客都有。
宿主机安装NVIDIA-CONTAINER-RUNTIME
在https://nvidia.github.io/nvidia-container-runtime/ 查看支持的操作系统和版本,并根据对应选项,添加源,因为我是centos7,所以添加方式为:
123distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-c ...
「深度学习基础」余弦退火学习率-PyTorch版
模型训练Trick
背景:深层神经网络难训练是因为学习过程容易陷入到马鞍面中,即在坡面上,一部分点是上升的,一部分点是下降的,如图在z轴上是最小值,而在x轴上是最大值。马鞍面上损失对参数的一阶导数为0,二阶导数的正负值不相同,由于梯度为0,模型无法进一步更新参数,因此模型训练容易陷入马鞍面中不再更新。
而余弦退火学习率可以很好的改善这个问题,这个是Pytorch官方的介绍。
但是官方的介绍里只有公式,没有告诉我们如何使用。
公式看不懂的同学不用担心,PyTorch都给我们封装好了,使用起来非常简单,PyTorch自带两个余弦学习率调整的方法,一个是CosineAnnealingLR,另一个是CosineAnnealingWarmRestarts。
CosineAnnealingLR
1CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1, verbose=False):
这个比较简单,只对其中的最关键的Tmax参数作一个说明,这个可以理解为余弦函数的半周期.如果max_epoch=50次,那么设置T_max=5则会让 ...
ubuntu下回退内核版本
查看可用内核信息
grep menuentry /boot/grub/grub.cfg
安装回退版本的内核
x.x.x-x为内核版本,本文以4.18.0-18为例
sudo apt-get install linux-headers-x.x.x-x-generic linux-image-x.x.x-x-generic
安装4.18.0-18版本内核
sudo apt-get install linux-headers-4.18.0-18-generic linux-image-4.18.0-18-generic
修改GRUB
sudo gedit /etc/default/grub
将GRUB_DEFAULT=0修改为你所想要还原的版本号,
如:GRUB_DEFAULT="Advanced options for Ubuntu > Ubuntu, with Linux 4.18.0-18-generic"
更新GRUB
sudo update-grub 然后重启电脑 使用uname -r查看内核版本
docker笔记
笔记
常用命令
12345678910111213141516171819attach # 当前shell下attach连接指定运行镜像build # 通过Dockerfile定制镜像commit # 提交当前容器为新的镜像cp # 从容器中拷贝指定文件或目录到宿主机中create # 创建一个新的容器,同 run 但不启动容器diff # 查看 docker 容器变化events # 从docker服务器获取容器实时事件exec # 在已存在的容器上运行命令export # 导出容器的内容流作为一个 tar 归档文件【对应 import】history # 展示一个镜像形成历史images # 列出系统当前镜像import # 从tar包中的内容创建一个新的文件系统映像【对应 export】info # 显示系统相关信息inspect # 查看容器详细信息kill # kill 指定的容器load # 从一个 tar 包中加载一个镜像【对应 save】login ...
Docker Caffe训练自定义模型
docker安装caffe
docker构建容器,新建文件Dockerfile,复制进下面的内容,然后运行build构建容器,读条完毕后CPU版的docker Caffe就安装好了。
1docker build -t caffe:1.0 .
Dockerfile
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748FROM ubuntu:16.04LABEL maintainer caffe-maint@googlegroups.comRUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ wget \ libatlas-base-dev \ libboost-all-dev \ libgflags-dev \ ...
RoboMaster视觉学习建议
视觉学习建议
目录
程序语言
操作系统
管理工具
OpenCV
数学基础
神经网络
推荐网站
程序语言
C++
C++编写起来和C语言一样结构清晰,又在C语言的基础上增加了许多新的功能,还可以直接操作硬件,绝对是研发机器视觉最好的语言。
面向对象,封装、多态、继承这些思想绝对是编程的重点。小型项目可能感觉不出来,一旦项目代码超过千行,如何解耦和划分功能模块就成了所有人不得不面对的问题,而C++正好提供了面向对象的编程模型,又是静态编译型语言,速度快,是一定要学好的。
一个人写代码乱一点可能不要紧,但是多个人一起写代码就需要一个强有力的代码规范,比如变量的命名、类的命名、宏定义的命名和缩进格式等,这里我推荐大家看一下华为的方舟编译器代码规范,学习一下别人的代码是如何编写的。
Python
Python是我们用来编写深度学习的脚本语言,py的编写方式远比C++简单,开发小型项目的效率比C++高。但是Python是解释型语言,不进行编译,运行时底层有一个Pyhton解释器在动态解释代码,这就造成了Python在开发大型项目时运行速度会变慢,结构不清晰。
我们一般使用 ...
Centos虚拟机多节点配置
VMware创建虚拟机
单节点创建
导入ISO镜像
从阿里源下载Centos7镜像,并导入到VMware中,创建新的虚拟机。
给节点起名
因为要创建多节点,所以给新的虚拟机命名为Centos7_1,之后创建更多的节点就按序号命名。
选择硬件配置
虚拟机的硬件配置可以根据需要更改,如果不确定的话也可以安装完毕之后更改硬件配置。
安装Centos7
选择完硬件配置之后的安装过程就和普通的Cenots安装过程一样,等待一段时间后就会进入Centos安装界面。
软件选择这里选择开发及生成工作站,如果选择最小系统的话安装结束之后只有一个黑黑的命令行,看不到图形界面,不好操作。
安装位置新手选择自动分区就可以了。
安装过程中可以顺便设置一下root密码。
单节点网卡配置
安装结束之后就可以看到令人兴奋的图形界面了,但是这个时候的Centos还不能联网,也不能和宿主机互通,使用ifconfig查看网卡信息也获取不到IP地址,所以需要一些设置。
配置VMware虚拟机网络设置
接下来需要去虚拟机设置界面设置网络适配器为桥接模式,方便后续固定IP地址。
使用命令自动分配IP地址
接下来需要切换 ...
Git仓库代码提交统计
Git 代码统计
查看仓库提交者排名前3
1git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 3
给Git查看某一个用户代码量
1git log --author="用户名" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
统计每个人增删行数
1git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" - ...
Nginx配置请求转发到后端
新建一个nginx server
在nginx的配置文件中新建一个server监听前端部署的端口
123456server{ #监听端口 listen 80; server_name 网站名称;}
使用Nginx代理前端页面
然后在server中添加一个location,就是把访问路径指向前端项目打包后的地址
1234location / { root 前端项目打包后的地址; index index.html index.htm;}
nginx请求转发到后端
在部署前后端分离项目时,通常都要使用nginx把前端的请求转发到后端的接口上去,这就要配置nginx的proxy_pass功能。
12345678910# 转发请求到后端location /api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header ...