カッティングボード

カルマをカットしてます

GPUの負荷テストをcliツールで行う

はじめに

GPU2枚をフルで使用すると電力が足りなくて落ちてしまうといったように見える現象が起きました,

そこでGPUにフルで負荷をかけるとどうなるか試したかったのですが,cliツールを紹介してる日本語サイトが見つからなかったのでメモ.

Ubuntu 16.04でCPUとGPUの両方に負荷をかける – 電気飴

↑みたいな感じでguiツールとかだったら普通にあるので,gui普通に使ってやる人とかはその辺参考にすればいいと思います.

gpu burn

gnu burnとかいういう名前的にめっちゃ怖いけどいい感じのツールがありました.

ソースコードは↓にあります. 普通にメイクするだけで大丈夫です.

github.com

↓のサイトで使い方とかまとめてくれてます.

Multi-GPU CUDA stress test

基本的にgpuの数だけ,cpuのコアも100%にしてくれてるっぽい感じがします.

使い方

git clone https://github.com/Microway/gpu-burn.git

# cudaの9.1とか◯.0以外のバージョンを使ってる場合は,Makefileの11行目とかを自分の使ってるバージョンに書き換えてください

cd cpu-burn

make

./gpu_burn -d 60

dockerのストレージドライバ(ファイルシステム)を調べる

はじめに

最近,↓のようにdockerのストレージドライバレベルに近い部分を触ったりしてるのに全く理解してないので何日かにわたって調べていきたいと思います.

cut-ter.hatenablog.com

cut-ter.hatenablog.com

ファイルシステムとかめっちゃ詳しいわけじゃないので,間違いとかあるかもしれないです.

dockerコンテナに利用されているファイルシステム

基本的にユニオンマウントという概念を用いたファイルシステムが使われているみたいです.

dockerを触ったことがある人はわかると思いますが,一つのdockerイメージは複数のdockerイメージを組み合わせられていることが多いです.

どのようにしてそれを行っているかというと,一つのマウントポイントに対して垂直に重ね合わせて行っているイメージのようです.

コンテナを実行する際には,イメージの時系列順にリードオンリーで重ね合わせます.その後ライトできる新たなイメージをその上に重ねます.基本的にコンテナ内で作業した内容はライトできる新たなイメージ部分に書き込まれるようです.

ファイルに関しては上の方に存在している情報が優先され,ディレクトリに関しては内容を組み合わせるようになっています.

ストレージデバイスの種類

今現在dockerでは7種類のストレージデバイスがあるみたいです.

  • overlay
  • overlay2
  • aufs
  • brtfs
  • device mapper
  • vfs
  • zfs

今回はここに調べることはしませんが,明日以降調べたりいきたいと思います.

デフォルトで利用されているストレージデバイス

特に意識してなかったのですが,↓の記事の調査してる時にストレージデバイスが判明してました. cut-ter.hatenablog.com

17.09.0-ceではoverlay2が利用されています.

今日のところはこんな感じにします.ストレージデバイスによってはnfsとかも許容できる可能性もあるのでしっかりと調べていきたいと思います.

dockerイメージのバックアップを2重に取る

はじめに

dockerイメージをレジストリとかにpushしてちゃんとバックアップ取ったりしたいですよね.

基本的に自前でレジストリ立てて管理したりとかしてると思います.

私もそうしているのですが,この間レジストリにpushしておいたらpullできなくなって死を迎えました.

そうならないようにレジストリにpushする以外のバックアップも取っておきましょう.

バックアップとるだけじゃなくてバックアップから復元できることを事前に確認しておけって話ですが....

バックアップと復元

↓のコマンドでイメージをtarにまとめることができます.

sudo docker save test >test.tar

↓のコマンドでtarからイメージを読み込むことができます.

sudo docker load < test.tar

バックアップは取ればいいってもんじゃなくて復元できないと意味ないんだよなぁ.

nvidia-dockerでgpuのリソースを制限する

はじめに

nvidia-dockerを何も考えずに複数動かしてしまうと,後から動き始めた方がメモリが足りないよーとかエラー吐いてしまってまともに動きません.

複数同時に並行して動かしたいときはgpuリソースを制限しながらやってあげないとダメみたいなので制限しましょう.

やり方

nvidia-docker

NV_GPU='0,1' nvidia-docker run -it nvidia/cuda nvidia-smi

nvidia-docker2

docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES='0,1' --rm nvidia/cuda nvidia-smi

↑みたいな感じにすると,コンテナからは指定されたデバイスidの物しか見えなくなるみたいです.

nvidia-docker2の変更点的なのは↓のサイトみたいな感じでまとめてくれてる人がいました.

aetros.com

雑談

今日作業してたら突如としてネットワークに繋がらなくなって焦りました.

原因としてはDHCPサーバーが死んでたのが原因だったのですが,LANケーブルかハブが調子悪いのかなぁとか調べてたら結構時間かかってしまいました.

固定ip取得してるやつだけ生き残ってるっぽかったので最終的にDHCPだとわかりましたが,1年前だったら絶対に気付けなかったので少しづつは成長できてるのかなー.

yoloが動くDockerイメージを作る

はじめに

yoloが動作する機械学習ノードをいい感じに作っていたのですが,コミットしていたイメージがでかくなりすぎてpullできなくなってしまいました.

どうも15GBあたりのイメージになるとメモリ関連とかでpullできなくなってしまうらしいです.

コミットしていたりして使えなくなるとひたすらに辛さを感じるので,ちゃんとDockerfile書きました.

Dockerfile

FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
RUN apt update -y  && apt upgrade -y
RUN apt -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip vim
RUN mkdir /root/Sources

WORKDIR /root/Sources

RUN git clone https://github.com/opencv/opencv.git
RUN git clone https://github.com/opencv/opencv_contrib.git
RUN mkdir opencv/build

RUN cd opencv/build && cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/root/Sources/opencv_contrib/modules -D WITH_CUDA=ON .. && make -j5 && make install
RUN ldconfig

ADD darknet /root/darknet
WORKDIR /root/darknet
RUN make -j5
RUN make install

説明

使用するイメージの検討に関しては↓の記事を読んで検討してください. cut-ter.hatenablog.com

基本的に最初はopencvをビルドして,その後にyoloのビルドをしています.

yoloのビルドは,Makefileで色々パラメータをいじる必要があるので外部からADDするようにしています.

Dockerfileと同階層に↓からyoloを持ってきて,Makefileをお好きなパラメーターに書き換えてください.

pjreddie.com

Opencvとcudaを使用するように設定して動作することは確認してあります.

Dockerでビルドした後に軽量化とかしてないのでひたすらにでかいのでよくないDockerイメージの例ですね.

Dockerのあるバージョンからビルド部分を切り離したりできるようになったらしいのでその辺調べてイメージをちゃんと軽量化したらdockerhubとかにあげたいですね.

今年もアドベントカレンダー完走した

はじめに

このブログは下のアドベントカレンダーの25日目の記事です. adventar.org

初日を書いたのがついこの間のような気がしますが,もう25日たったんやなー.

個人的に振り返ってみる

下が1日目の記事ですね. cut-ter.hatenablog.com

今見ても完全にゴミって感じですね.Twitterのリンク貼ればいいのにスクショ貼ってるし,なんか適当に赤く塗りつぶしてる画像がリンク貼った時に出てくるし.

リンクを見てリンクを踏もうかなって思えないやつですよね.

今月結構ブログをかいてて,ちゃんと書くかーってきめて書いた日はリンクの時に出てくる画像とかもこだわったりしてみたりしてました.

下のゆかりさんのやつとかは結構画像にこだわったりしてました.

でもなんかリンク踏もうとするとお探しのブログは見つかりませんとか出るのでもしかしたらなんかよくない内容を書いてたのかもしれない.

cut-ter.hatenablog.com

まぁ1日目に比べると途中は,はてなブログの扱いにも慣れてきて徐々にましな感じになっていったかなと思います.

全体的に振り返る

現状のアドベントカレンダーの画像を貼るとこんな感じですね. f:id:cut-ter:20171225174640p:plain

25日に関してはこのブログなのであれですが,見事にきれいに埋まってるなー.

まぁ去年に引き続きって感じですが,一人で複数回書いてくれてる人が結構いてその人たちに支えられて完走できたかなって感じですね.

そういえばどこにも書いてなかったですが,この記事を時間内に上げることさえできれば見事完走って感じですね.

誰か遅刻してたような気がしなくもないけどまぁ細かいことは気にしない.

なんだかんだ言って25日しっかりと完走できてるアドベントカレンダーって多くはないのでこれはまぁまぁ誇れることかなって思いますね.

団体とかでアドベントカレンダーやってればまぁ完走できるけど,ごく限られた身内だけで回してて完走できたのは普通に嬉しいですね.

去年に比べると「誰か頼む書いてくれ」って感じなのはなく,いつの間にか全体的に埋まってるって感じでした.

みんな社会人になってしまうので来年以降は,こんな感じでアドベントカレンダーできないかもしれないのでとりあえず今年完走できてよかったなって感じです.

できればまた来年もやりたいな〜って感じですね.

まぁダラダラと書きましたが,アドベントカレンダーに参加してくれた人,読んでくれた人たちありがとうございました.

f:id:cut-ter:20171225175320p:plain

停電復旧作業

今年の停電は短く、昨日一日で終わったらしいので復旧作業をしに行ってきました。

とはいっても研究室の普及作業自体はなまずんがやってくれていたので、個人ノードとか僕が管理してる機械学習ノードの復旧作業とかやってました。

個人ノードは特に問題なく立ち上がりました。

機械学習ノードに関してはなぜかnvidia-dockerが壊れました。nvidia-dockerのボリューム周りの権限がおかしくなってて、コンテナが立ち上がらなくなってしまいました。停電作業時にコンテナを終了せずに、ホストノードを殺してしまったのがよくなかったかもしれないです。

nvidia-dockerの復旧方法を調べながら色々やっていたのですが、途中複数のサイトを参考に作業してしまった影響で取り返しがつかなくなってきてしまったのであきらめてOS自体を再インストールして対応することにしました。

これは結局終わらんかったので明日引き続きやります。

研究室のラック間のハブを新しくした影響で、ハブが余ったので僕の使っていたくっそ古びたハブを交換したら9倍くらい速度が出るようになりました。

僕の使ってたハブが100Mbpsだったというオチなので、ハブはちゃんと1Gbps対応してるかどうか確認しような