CUDA Visual Studio Integration(Windows)の環境下でホストコードでOpenMPを使いたい時の設定
VisualStudioでCUDAコードをビルドする時にホスト側のコードでOpenMPを使いたかった
結論
ソリューションエクスプローラー → プロパティ→CUDA/C++ → Command Line
の、追加のオプションの欄に以下を追加する
-Xcompiler -openmp
Xcompilerでホスト側コンパイラへ直接オプションを渡すことが出来る
Visual Studioの場合、オプションはfopenmpではなくopenmpだった
(fopenmpだとオプションが見つかりませんでしたと言われる。openmpを指定するとエラーが出なくなり動いているが、これでいいという根拠が見つからないので何か知ってる人がいらっしゃったら教えてください)
kubernetesのjobでsidecarのコンテナを終了させる方法
sidecar構成(1つのpodの中にメインのコンテナ+proxy等を担当するサブのコンテナを置く)をしている状態でjobやcronjobを走らせようとすると、メインのコンテナが終了してもサブのコンテナが終了しないとjobは完了扱いにならない
cronjobの場合、定期実行なので完了扱いにならないと次の実行で何かと困ったことが起きる
この解決法として、主に2つの解決法がある
- concurrencyPolicyをReplaceにする
- メインのコンテナからサブのコンテナにSIGTERMを送る
1.の方は、cronjobの設定で定期実行に前回の実行が終わってない時の挙動を設定できる。 これをReplaceにしておくと前回の実行が終了してるかどうかにかかわらず新しくjobを作り直すため、付け焼き刃的ではあるが一応解決はする。
ただ、1.の方法は正攻法ではないので、2.の方を検討する。
メインのコンテナでの処理が終わった時に、サブのコンテナのプロセスにSIGTERMを送ることで終了させる。 昔のkubernetesではpod内で名前空間を共有することができなかった(っぽい)が、今ではできるようになったのでこの方法が使える。
以下、実際の実装例を書く
構成
メインのコンテナ: python
サブのコンテナ: nginx
python
psutilを使ってサブコンテナのプロセスであるnginxのPIDを取得、SIGTERMを送る 実際に使うとしたらこのコードの前に目的の処理を書く、今回はnginxにSIGTERMを送るだけ
import psutil for proc in psutil.process_iter(): if "nginx" in proc.name(): print(proc.name()) print(proc.pid) proc.terminate()
Dockerfile
特筆することは無いが、nginxの起動を待ってから動くようにsleepを入れた
FROM python:3 ARG project_dir=/project/ WORKDIR $project_dir ADD . . RUN pip install -r requirements.txt CMD sleep 5 && python test.py
jobのyaml
shareProcessNamespace: true
を記述することで、pod内で名前空間が共有されるようになる
他は普通に書く
apiVersion: batch/v1 kind: Job metadata: name: sleep spec: completions: 1 parallelism: 1 template: spec: shareProcessNamespace: true containers: - name: sigterm-test-python image: sigterm-test-python:latest imagePullPolicy: Never - name: nginx image: nginx restartPolicy: Never
出力
起動直後
$kubectl get pods NAME READY STATUS RESTARTS AGE sleep-c9b8f 2/2 Running 0 6s
終了
&kubectl get pods NAME READY STATUS RESTARTS AGE sleep-c9b8f 0/2 Completed 0 29s
$kubectl get jobs NAME COMPLETIONS DURATION AGE sleep 1/1 7s 13s
サブコンテナのnginxも終了されており、jobが完了していることが確認できる
参考
VitisでEmulation-SWをするとlibgmp.so.7: cannot open shared object file: No such file or directoryが発生する
問題
VitisでEmulation-SWとしてビルドしたものを実行しようとすると以下のようなエラーが出る
$./hoge fuga.xclbin
./hoge: error while loading shared libraries: libgmp.so.7: cannot open shared object file: No such file or directory
解決策
GNU MPがデフォルトではインストールされてないのにもかかわらずVitisでは標準でLinkerに入っているのが原因
GNU MPをインストールする
$./configure $make $make check $sudo make install
しかしこれだと/usr/local/libにはlibgmp.soとlibgmp.so.10しか入らないため、libgmp.soへのシンボリックリンクをlibgmp.so.7として作る
$cd /usr/local/lib $sudo ln -s libgmp.so libgmp.so.7
また、LD_LIBRARY_PATHを加える必要があるため、
$export LD_LIBRARY_PATH=/opt/xilinx/xrt/lib:/usr/local/lib
*2020/10/13 パスが間違っていたため修正
とする。/opt/xilinx/xrt/libの部分は/opt/xilinx/xrt/setup.shに書いてあるのと同じものを持ってくる。
その他
これを解決しても次は
./hoge: error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory
となるが、これは先程と全く同じでGNU MPFRをインストールしてシンボリックリンクを張れば良い
参考 qiita.com
PyTorchでFine-Tuningをするためにモデルをカスタムするときの注意
VGGシリーズのように構築済みのモデルをFine-Tuningするとき、出力サイズに合わせてFull-Connectionのパラメータだけ変えようとしてハマったのでメモ
VGG-NETS
問題
例えばVGG19で、最終FCの出力を1000から10にするために
model = torch.hub.load('pytorch/vision:v0.6.0', 'vgg19', pretrained=True) model.classifier[6].out_features = 10
このように指定するとmodelのprint結果自体は正しく10になっている
print(model) > ... (2): Dropout(p=0.5, inplace=False) (3): Linear(in_features=4096, out_features=4096, bias=True) (4): ReLU(inplace=True) (5): Dropout(p=0.5, inplace=False) (6): Linear(in_features=4096, out_features=10, bias=True) ...
しかしこれで実際にモデルに画像を入れてみると、出力が1000のまま変わってない
outputs = net(images) print(outputs.size()) >torch.Size([64, 1000]) #バッチサイズ64
解決策
FCの出力をちゃんと10にするにはこうしなければいけない
model.classifier[6] = nn.Linear(4096, 10)
outputs = net(images) print(outputs.size()) >torch.Size([64, 10]) #バッチサイズ64
参考
How to modify the final FC layer based on the torch.model - PyTorch Forums
Transfer Learning with PyTorch : Learn to Use Pretrained VGG16 Model 間違っている方の例
Vivado HLSのC/RTL Cosimulationが終わらない問題の解決法
Vivado HLSでC/RTL協調シミュレーションを行うときに、以下のようなWaringが出続けて永遠に終わらないことがある。
シミュレーションの設定画面でsetup onlyにチェックを入れると、シミュレーションは実行されずにシミュレーションを実行するためのファイル群の用意だけが行われる。
これによってプロジェクトフォルダ内に ./sim/verilog/sim.bat というファイルが生成されるため、これをターミナルから直接実行すると正常に実行できる。
参考:
Raspberry Pi3を使ってADS-Bを受信、FlightRadar24にフィードする
前回はbump1090を使ってADS-Bを受信し表示させましたが、今回は更にそのデータをFlightRader24に送信してみます。前提として24時間の電源確保とインターネット接続が必要になります。 条件を満たしている場合、フィーダー特典としてビジネスアカウント($49.99/月)が提供されます。
以下を打ち込み、その後必要事項を記入するだけで簡単にフィードをすることができます。
インストールが終わると初期セットアップが始まります。
Enter your email address (username@domain.tld)
最初にメールアドレスを聞かれます。アカウントを登録するときに必要となります。
次に、過去にキーを持っていたか聞かれるので、持っていない場合は空欄で次にすすみます。
Would you like to participate in MLAT calculations?
MLATを使うかです。
どちらでもいいと思います。
Enter antenna's latitude (DD.DDDD)
Enter antenna's longitude (DDD.DDDD)
アンテナの緯度経度、海抜高度をです。
緯度経度はGoogleMAP上で右クリックをして”この場所について”をクリックすると表示出来ます。 海抜高度は
こちらのサイトで取得できます。
次に、
Would you like to continue using these settings?
と聞かれるのでyesを入力します。
Receiver selection
次に使用する受信機を聞かれるので答えます。私の使っているR820T2の場合
1 - DVBT Stick (USB) を選びます。
Enter your additional dump1090 arguments or leave empty
こちらは空白のままでOKです
Would you like to enable RAW data feed on port 30002 (yes/no)
Would you like to enable Basestation data feed on port 30003 (yes/no)
こちらの2つはどちらもnoにしておきます。
Please select desired logfile mode
ログファイルの設定です /var/log に置かれます。 お好みで選択してください。
以上で設定は終わりです。FlightRader24からメールが届きます。
以下、FR24のコマンドです
sudo service fr24feed start フィードをスタート
sudo service fr24feed stop フィードをストップ
sudo service fr24feed restart 再起動
sudo service fr24feed status 現在のステータス
Raspberry Pi3でADS-Bを受信する
前回はPCを使って受信しましたが、今回はRaspberry Pi3を使って受信していきます。
Raspberry Piの初期設定は終わっている前提で進めていきます。
必要なパッケージをインストール
sudo apt-get install cmake
sudo apt-get install libusb-1.0-0.dev
sudo apt-get install build-essential
sudo apt-get install pkg-config
rtl-sdrをGitHubから取得
rtl-sdrをビルド
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
cd -
sudo cp rtl-sdr.rules /etc/udev/rules.d/
SDR受信機のテスト
Found 1 device(s):○○ が表示されればOK
されない場合、以下を試す
dump1090をGitHubから取得
dump1090をビルド
make
dump1090を実行
コンソールに受信したデータのリストが出ていれば成功です。
また、ブラウザでRaspberry PiのIPアドレスの8080番ポートポートにアクセスして以下のような地図を見ることができます。