记录

ubuntu 安装docker & nvidia-docker

#!/bin/sh
#安装docker
sudo apt-get install docker docker-io
#安装NVIDIA-docker
wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker_1.0.1-1_amd64.deb
#testing
sudo nvidia-docker run --rm nvidia/cuda nvidia-smi
#这个test通过之后基本说明nvidia-docker安装成功,不过不一定能用

centos 安装docker & nvidia-docker

#安装docker
sudo yum install docker docker-io
#安装NVIDIA-docker
wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
rpm -ivh nvidia-docker-1.0.1-1.x86_64.rpm
#testing
sudo nvidia-docker run --rm nvidia/cuda nvidia-smi

关于docker的问题就来了,装完发现有几率不能运行,其实这不是装的不对,而是有些系统需要手动启动(怀疑是因为没有重启)

#重启nvidia-docker服务
sudo systemctl restart nvidia-docker
#当然也可以重启docker服务
sudo systemctl restart docker

除了这个小问题之外,还有可能遇到的nvidia-docker启动不成功的情况,有诸如此类的错误的。
“legacy plugin: plugin not found”
nvidia-docker | 2018/11/01 10:20:17 Error: Could not load UVM kernel module. Is nvidia-modprobe installed?

#安装以下包估计就已经没有更多错误了
sudo apt-get install nvidia-modprobe
#暂时只踩到这么多坑

docker 删除所有none镜像

docker rmi $(docker images | grep "none" | awk '{print $3}') 

对于可能遇到的一种情况:使用nvidia-docker启动时报出本地没有镜像,但docker可以启动。这种情况是由于nvidia-docker需要使用一个数据卷容器,本地环境中没有该数据卷容器。解决办法为:

docker volume create --name=nvidia_driver_418.67 -d nvidia-docker
#如果该语句运行失败。重启nvidia-docker和docker服务。
systemctl restart docker/nvidia-docker

生成一个可以使用GPU的docker镜像的dockerfile代码。其中包含安装了必要的Python库,protobuf库,

FROM ubuntu:16.04
#这个环境变量有点讲究,安装某些库的时候需要交互确认,但交互之后就会卡死,该环境变量会避免这种交互
ENV DEBIAN_FRONTEND=noninteractive
#有时候某些update失败不影响打包,可以用exit去防止失败退出
RUN apt-get update; exit 0
RUN apt-get install -y \
        build-essential \
        make \
        unzip \
        wget \
        python3-dev python3-pip \
        vim \
        git \
        libssl-dev \
        zlib1g-dev \
        libbz2-dev \
        libreadline-dev \
        libsqlite3-dev \
        curl \
        llvm \
        libncurses5-dev \
        xz-utils \
        tk-dev \
        libxml2-dev \
        libxmlsec1-dev \
        libffi-dev \
        liblzma-dev \
        python-numpy \
        && rm -rf /var/lib/apt/lists/*

RUN wget http://github.com/protocolbuffers/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.tar.gz \
    && tar xf protobuf-all-3.5.1.tar.gz \
    && cd protobuf-3.5.1 \
    && ./configure CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" --prefix=/usr \
    && make install \
    && cd .. \
    && rm protobuf-all-3.5.1.tar.gz protobuf-3.5.1 -r

ENV PYENV_ROOT=/opt/pyenv \
    PATH=/opt/pyenv/shims:/opt/pyenv/bin:$PATH \
    CAFFEPATH=/opt/python/caffe
ENV PYTHONPATH=/opt/python:$PYTHONPATH
ENV LD_LIBRARY_PATH=$CAFFEPATH:/usr/local/lib:$LD_LIBRARY_PATH

RUN git clone --depth 1 https://github.com/pyenv/pyenv.git /opt/pyenv \
    && eval "$(pyenv init -)" \
    && env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.4 \
    && pyenv global 3.6.4

RUN pip install protobuf==3.5.1 cmake numpy
ENV DDK_HOME=/opt/ddk

#RUN mkdir -p /dep && cd /dep \
#    && wget  _____   -O caffe_cpu.tar \
#    && mkdir -p /opt/python \
#    && tar -xvf caffe_cpu.tar -C /opt/python \
 #   && wget ${NART_URL} -O nart-0.2.1-py3-none-any.whl \
 #   && pip install nart-0.2.1-py3-none-any.whl \
 #   && cd / && rm -rf /dep

#重要的是一下的关于GPU的环境变量的设置
ENV CUDA_VERSION 10.0.130
ENV NVIDIA_VISIBLE_DEVICES=all 
ENV NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
ENV NVIDIA_REQUIRE_CUDA "cuda>=10.0"
LABEL com.nvidia.volumes.needed="nvidia_driver"
LABEL com.nvidia.cuda.version="${CUDA_VERSION}"

#拷贝CUDA10、cudnn、tensorRT库
COPY ./cuda-10.0 /usr/local/cuda-10.0
COPY ./trt/trt5_lib /opt/trt5_lib
COPY ./cudnn /opt/cudnn
ENV PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/opt/cudnn:/opt/trt5_lib:$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib:/usr/local/cuda-10.0/lib64:

git 系列

添加子模块
git submodule add ${url} ${path}
#其中url为git仓库地址,path为submodule存放地址
删除子模块

删除是一个很不人性化的操作,此处dis一下git开发者

  • 先删除.gitsubmodule下相关的子模块
  • 再删除.git/config下的相关子模块
  • 删除git子模块缓存git rm --cached ${submodule_path}

更新submodule的URL操作基本也和删除一样的操作

  • 先修改.gitsubmodule下相关的子模块的URL
  • 再修改.git/config下的相关子模块的URL
  • git submodule sync
git submodule切换分支或者版本
cd ${submodule_path}
git pull
git checkout ${commit_id} 
#有时候需要git checkout --hard ${commit_id}. 回退之前版本更是需要用reset而不是checkout
git 覆盖前一个commit。

因为有时候由于一点小小的修改做了一些无用的commit,造成git tree很丑陋,所以一些尝试性的commit可以覆盖前一次,减少分支上可见的commit。

#add 操作是一样的
git add -A
#commit有所不同
git commit --amend
#推向远程仓库时也不一样。值得注意的是,在多人合作的分支上最好不要或者谨慎这样操作,被队友打是小事,
#酿成大祸可能就只能跑路了。最后丢工作又丢老婆
git push origin HEAD:refs/heads/0.9.0 --force
#正常push是不需要--forse的……
git 修改默认编辑器
git config --global core.editor vim
git config --global core.editor code #比如说你想用vscode写commit信息
git删除远程分支
git push origin --delete dev #删除dev分支
git branch -d dev #删除本地dev分支
git打tag

tag就是对某一个时间点的代码打上标签,以后他也不会变,标签对应的代码永远是这一刻的

git tag -a v1.4 -m 'my version 1.4'
#把tag推给远程
git push origin ${tag_name}

CPP

关于const

const的基本理念就是修饰一个对象,使其无法被修改。
基于这一个理念,const的用法可以产生出神出鬼没的变化。我觉得这也是CPP的魅力所在。(学好CPP真是一件不可能的事情)

  • const用法一
    修饰变量,当然被const修饰的变量应该叫做常量。不可修改,只能使用。效果与C的宏是一样的。
  • const用法二
    修饰指针。实际上对于一个对CPP有初步了解的人来说,不应该用有色眼镜来看指针,因为他也是变量,应该一视同仁。待续…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值