サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
qiita.com/syoyo
漢は黙ってシングルファイル C/C++ ライブラリですね! シングルファイル C/C++ ライブラリとは, ヘッダファイル .h ひとつだけで機能が実装されているライブラリ(もう少し条件をゆるくして .cc も含む)のことです. header-only とも言われれたりします. このあたりの元祖は nothings 先生 http://nothings.org/ ですね. 最近は github にコードをあげています. https://github.com/nothings/stb シングルファイル系のライブラリまとめ一覧もあります. シングルファイル系が便利すぎてやばいので, 自分でもいくつか作りました. TinyObjloader(Wavefront .obj loader) https://github.com/syoyo/tinyobjloader TinyEXR(OpenEXR
漢なら RDMA でデータ送りたいですね! とりあえず手っ取り早く rsocket http://syoyo.wordpress.com/2012/12/06/rsocket-new-way-of-rdma-aware-programming/ を使い, 既存の python スクリプトで高速転送を実現してみましょう. 構成 Server と Client は InfiniBand QDR と, 1 GbE で物理的に繋がっています. InfiniBand のレイヤは IPoIB で繋がっているものとします. テストスクリプト Client から 1GB のデータを送り, Server 側はそれを受け取るだけというスクリプトです(単方向データ通信). # server.py import socket import itertools HOST = '' PORT = 8081 s = s
A Fast, Minimal Memory, Consistent Hash Algorithm ご紹介(システム系論文紹介 Advent Calendar 2014).hashシステム系論文紹介分散ストレージjumpconsistenthash (本稿は, システム系論文紹介 Advent Calendar 2014, 12/20 です http://www.adventar.org/calendars/440) 論文は arXiv から取得できます. http://arxiv.org/abs/1406.2294 Jump Consitent Hash と呼ばれる, 分散ストレージ系で有益なハッシュ関数を求めるアルゴリズムです. 現在史上最強のハッシュアルゴリズムのひとつと言えるでしょう. 無性に分散ストレージライブラリを作りたくなってきますね! 共著者の Eric Veach にも注
関数とかのベンチマークをサポートしてくれるライブラリ. C++11 機能(より正確には -std=c++0x)を使っているので新しめの C++ コンパイラでないと動きません. 使い方は至って簡単で, ユニットテストのように, ベンチマークで計測したい関数を適当に benchmark::State を引数に取るようにして, マクロで呼び出しの指示を与えます. #include "benchmark/benchmark.h" static void BM_LongTest(benchmark::State& state) { double tracker = 0.0; while (state.KeepRunning()) for (int i = 0; i < state.range_x(); ++i) tracker += i; CHECK(tracker != 0.0); } BENCH
背景 Chainer で書かれた automatic portrait image matting のモデルを, ONNX にコンバートしてモバイルで動かしたい resize_images を pyramid pooling で利用している. onnx-chainer では resize_images のエクスポートに対応していなかったので, 対応しようとしたところ, resize_images(より正確には upsampling + bilinear 補間)の振る舞いが Chainer と ONNX で異なる(TensorFlow とも異なる)ことがわかった Chainer, ONNX, TensorFlow いずれもドキュメントでは bilinear 補間するとだけ書いてあり, 実際どのような bilinear 補間をするのかという仕様がありません. 実のところ, bilinear 補
自分で作ったオープンソースな C++ ライブラリ, メモリリークやバグの少ない状態で, いろいろな人に安心して喜んで使ってもらえるように, 普段から内面をキレイに保っておきたいですよね! ここでは C++ のコードを内面からキレイに保つレシピを集めてみました. (追記) @MitsutakaTakeda さんの C++ コードのデトックスも合わせて読んで, この春, 一歩先行くぬけがけ美ワザを極めちゃお! http://qiita.com/MitsutakaTakeda/items/6b9966f890cc9b944d75 Instruments MacOSX ユーザであれば, XCode に付属(?)の Instruments がオススメ. GUI でお手軽にメモリのプロファイリングやリークの調査が行えます. Valgrind 昔からある実行バイナリをインストゥルメントして解析してくれる
追記(2022/02): 本記事の想定するユースケースでは, 長期稼働する場合 tailscale(wireguard)がよさそうです! ただ, tailscale は sudo 権限いるようなので, sudo が使えない場合のとき(第三者のサーバやクライアント PC 使っているとか)は本記事の reverse ssh tunnel がいいかもしれません. (一応いろいろ設定すれば user 権限でもうごく. パフォーマンスも問題ないようである! https://tailscale.com/blog/throughput-improvements/) Reverse ssh tunnel は便利な機能で, たとえばグローバル IP などで直接アクセスできない自宅 PC に外部からアクセスしたり, VPN をオフィス(仕事場環境)で使えない(が, ssh port は使える. or VPN
int main(int argc, char **argv) { const char *cpc; const char *cpc2 = (const char*)cpc; short b = argc; return b; } $ clang-tidy file.cc 7 warnings generated. file.cc:1:27: warning: unused parameter 'argv' [clang-diagnostic-unused-parameter] int main(int argc, char **argv) ^ file.cc:4:3: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] const char *cpc2 = (
漢なら docker コンテナで CUDA を使いたいですね! CUDA を使えるようにしましょう. セットアップ ホスト OS に CUDA とドライバ一式をいれておきます. 今回は Centos6.5 CUDA 6.0(driver 331.67) /usr/local/cuda に nvcc やら toolkit をインストール にしました. コンテナ内で CUDA プログラムを動かす. privileded つきで, libcuda.so と /usr/local/cuda を container に expose(volume mount)します. サンプルコードを /media にマウントします. $ docker run --privileged -v /usr/lib64/libcuda.so:/usr/lib64/libcuda.so -v /usr/lib64/libc
漢なら黙って Parallella ですね! 計算コアが tile 型で scalar なのが素敵です. エクサスケール世代では SIMD は難しいかもしれません. scalar コアに期待が高まりますので今のうちに準備しておきましょう. 動かしてみる. Parallella には ARM コアが付いているので普通に Linaro が動いています. パッケージに添付の micro SD カードに Linaro + Epiphany SDK がプリインストールされているので刺すだけでもう使えるようになっています. なんたるおもてなし力! 残念ながら HDMI 出力は, こちらが持っている HDMI 対応モニタがうまく対応していないようで GUI(画面出力) は出ませんでした. ので図のようにイーサネットを刺してネットワークからリモートログインします. デフォルトでは DHCP でネットワーク
漢なら Docker(LXC) で InfiniBand を動かしてみたいですね! 一応すでに LXC で動いている論文がありますので [1], Docker でも実現してみましょう. 手順 環境 ホスト側: CentOS 6.5 コンテナ側: CentOS 6.5 と仮定して作業を進めます. もしかしたら Ubuntu12.04 or higher でもほぼ同じ手順でできるかもしれません. ホスト OS で IB(InfiniBand)が問題なく動いているとします. Docker で centos6 イメージを取得して IB 周りのパッケージを入れます. $ sudo docker pull centos $ sudo docker run -i -t centos /bin/bash # yum update # yum install infiniband-diags # その他 I
春到来ですね! github で公開しているオープンソース C++ コードの外見もリフレッシュして新しいジブンにチャレンジしたいですね! あわよくば運命的な C++ 出会いも期待できちゃうかも...! そこでここでは, 春トレンドを先取りした C++ スタイルコーデを集めてみました. Google C++ Style Guide みんなの憧れ, デキる大人のギロッポン外資系クールな C++ スタイル! なんだかルールがいっぱいで大変そう... と思ったズボラでうっかりな性格のアナタでも大丈夫! cpplint がコーデを自動でチェックして全力アシスト! LLVM Coding Standards アーティスティックでスタイリッシュ, でもちょっとコンサバな新宿スタイル! clang-format と組み合わせて周りの視線をがっちりキャッチ! WebKit Code Style Guidel
Matt Pharr 大先生がいつのまにやら golang で Google Drive と連携するコマンドラインファイル操作ユーティリティ作ってました. 漢なら黙って活用ですね! 何ができるか
4K モニタで PbP で Mac/Win/Linux の画面を集約して表示してクロスプラットフォームグラフィックアプリ開発の効率化を図る4K 漢なら Mac/Win/Linux のクロスプラットフォームグラフィックスアプリ開発ですよね! しかし GPU を用いたグラフィックアプリ開発(OpenGL, Vulkan, OpenCL, etc)だと, リモートデスクトップや X11vnc で画面を飛ばすのは遅くて使いものにならないので, 基本ネイティブに画面を表示することになります. それゆえ, 3 つの 2K モニタで表示して開発という辛い日々が続いていました. また, 色味もモニタごとにことなるので, レンダリング画像の比較も難しい状況でした(毎回レンダリング画像を特定のモニタに転送して比較) そんなとき, ふとしたことから, 最近の 4K モニタでは PbP(Picture by Pi
単一画像からの最新ディープラーニング顔アルゴリズムを試す(2017 年 7 月 14 日時点) (2020 年 1 月 1 日追記)顔認識顔形状復元inverse_rendering 漢なら, 単一画像から顔認識したり顔メッシュを復元したりをディープラーニングでやりたいですね! やりましょう! DenseReg DenseReg: Fully Convolutional Dense Shape Regression In-the-Wild https://arxiv.org/abs/1612.01202 顔のセグメンテーション(目, 鼻, 眉とか)と形状推定ができます. Semantic Image Segmentation 用に DeepLab http://liangchiehchen.com/projects/DeepLab.html を使っています. 独自 python caffe
ChatGPT(GPT-3.5?) しゅごいよねぇ... ローカルで(GPU で)似たようなの動かしたい... 追記: 2023/06 時点ですと 8bit 量子化が成熟してきていてで 3090 x 1 で問題なく動きました. また日本語ですと rinna 3.6B がいい感じでした. https://zenn.dev/syoyo/articles/946c17666e10fb LangChain + GPT-NEOX-Japanese-2.7b で日本語 LLM やりとり整備するメモ https://qiita.com/syoyo/items/d0fb68d5fe1127276e2a GPT-NEOX-Japanese-2.7b 試したけどなんか微妙だったネ... とりま LLM では大きさは正義と思いますので, gpt-neox-20b 試します. https://www.infoq.
漢なら GPU でレイトレーシングしたり機械学習ですね! しかし GPU クラスタを組んでも, タスクがあまりなくて遊待(idle)が多かったり, 夜使わないとかだともったいないですね. そこで最近話題の仮想通貨の GPU 採掘(Mining)で GPU 構築費用の足しにしてみることを考えたり, GPU をエージングし稼働耐性の高い GPU 個体を抽出するなどしたり, GPU 性能のベンチマークに使ったりとかしたいですね! ビットコインは ASIC 使うのが強いので, ASIC 耐性が考えられていてまだまだ GPU を使うことに意義のあるイーサリアムを採掘してみることにしましょう. 2017/04/21 時点ではイーサリアムが第二の取引ボリュームを持っています. https://coinmarketcap.com/ Radeon RX480と最近のイーサリアム事情 http://tatuj
漢なら GPU クラスタで CUDA でレイトレースしたり機械学習したいですね! GPU を使っていないときはマイニングで機材費用の足しにしたいですね. 調べると nicehash とかでは, NVIDIA 系でも性能の出せるハッシュアルゴリズム(?)を使うことができるようです. 今回は(まだまだ先行者利益がありそうな) ZCash をマイニングすることにします. アイコンが「ネ」に見えて素敵ですね. 匿名性を高めた決済用通貨を狙っているようなので, 今後期待できそうな暗号通貨かもしれませんね. Mining tool 今回は以下を使いました. この miner だと, 現在は nicehash pool 専用のようで, ビットコインアドレスで使います(ビットコインに逐次変換されるのかな? ZCash で持ちたい場合は違うツールとマイニングプールを使うことになりそうです) 最高 400 S
libClang/LLVM を使って C++ コードを JIT コンパイルする環境を整えます. 概要 構成としては以下のようになります. +------------------+ includes | | JIT +------------+ +--------------+ | C++ app | <--+- | C++ code |<---| STL header | | | | +------------+ +--------------+ +------------------+ | | C header | | libClang | | +--------------+ +------------------+ | | | libLLVM(MCJIT) | | | +------------------+ | | | STL/libc runtime |----+--------
漢なら GCE で Preemptible VMs を instance group で 100 万インスタンス規模でオンデマンドで立てて分散レイトレーシング処理を短時間で行いたいですよね! でもまだベータ機能なので 100 万インスタンス起動は無理そうですので, とりあえず準備として instance groups で Preemptible VM をささやかに立ててみましょう. できました. Terminate モードに設定を忘れずに gcloud CLI 経由で作業するものとします. instance template の create 時に --preemptible (--preemptive で無いことに注意!) に加えて, maintenance-policy を TERMINATE に設定する必要があります. --maintenance-policy TERMINATE T
冬到来! RX470 8GB マイニングエディションと ROCm TensorFlow で, GPU 機械学習をはじめよう(CIFAR10 7,600 examples/sec @ 88W)TensorFlowROCmrx470 冬到来! RX470 と ROCm TensorFlow で GPU 機械学習をはじめよう! RX470 8GB mem mining 版(中古)が, 税込 6.5 千円ちょっとくらいで買えるので(2019 年 1 月 10 日時点), お手軽に試せるよ! 優秀な TensorFlow 小学生さまにおかれましては, お年玉で買えてしまいますね. RX470 mining 版はメモリが 8GB で機械学習を始めるのによいのですが, 画面出力が無いので, GPU 内臓の Intel CPU と組み合わせるか, 画面出力用に別 GPU で Linux をセットアップして
漢ならアプリに CPU 優先度を付けて実行したいですよね! でも nice だとうまくいかない… 悲しくて涙で枕を濡らす日々が続いていました… そこで昨今の Linux に搭載されている cgroups による CPU リソース制御を使ってみます. 当然ベンチマークアプリは aobench http://code.google.com/p/aobench/ ですね. OpenMP 化してマルチスレッド実行するようにしておきましょう. 設定 cgroups の機能を有効にしておきます.
漢なら Docker で OpenGL アプリを HW accelerated で(GLX)動かしたいですね! できました. TODO 現状だと 1 container が GPU を占有するようなので, 複数 container で共有できるようにする. Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up
漢なら GCE(Google Compute Engine) から GCS(Cloud Storage) に, 安全かつお手軽にアクセスしたいですよね! GCE インスタンス起動 GCE インスタンス起動時に, cloud storage へのアクセスが出来る様ようにしておきます. を参考に, scopes の devstorage.full_control あたりです. GCE から GCS にアクセスしてみる. GCE のインスタンスに gcutil ssh INSTANCE-NAME でログインし, 内部から OAuth アクセストークンをメタデータサーバから取得してみます(curl がインストールされていると仮定). $ curl "http://metadata/computeMetadata/v1/instance/service-accounts/default/token"
背景 2019 年コモディティ品で GPU 計算ノードを構築するメモ https://qiita.com/syoyo/items/cffcd64aa09cdb042b5d あたりで GPU 計算ノード(機械学習, レイトレ, マイニング)を構築している 2019 年からだいたい 2.5 年くらい連続稼働させていて(~10 nodes くらい), インシデントも多少たまってきたので記録です. GPU の障害 1~2 週間連続稼働させているとエラーも出やすくなります. Linux(Ubuntu) + GPU エラーメッセージ集 https://qiita.com/syoyo/items/0707daed0295db6a3ffa GPU fallen of the bus がよく出ます: 熱暴走なり, メモリエラーが原因が多い模様. 基本リブートすれば治る. 機械学習などで長期間回すときは GP
Docker でコンテナを起動するとデフォルトは root になりますね. run するときに -u オプションでユーザを指定することができます. ただしこのユーザ名はコンテナ内でのユーザ名なので, ホスト側のユーザ syoyo を使って,
背景 レイトレーシングや機械学習など, aarch64(arm64) linux のプログラムを書いていたり, ライブラリをビルドしていたりする 市販で入手しやすい Native 環境(e.g. Raspberry Pi 4, Android スマホ + termux や, Jetson AGX とか. だいたい aarch64 4 コア + 8 GB mem な環境) だとビルドが遅かったり, 並列ビルドすると out-of-memory になりつらいので, つよつよ host PC(Threadripper とか)で cross-compile でやりたい 特に embree-aarch64 で ARM のビルドだと, 同等の性能の x86 の 5~10 倍はコンパイル遅いような現象が出て辛い AWS とかでつよつよ ARM インスタンス借りる手もあるが, レイトレーシングなど画面に出
夏休み到来ですね! 新しいジブンにチャレンジの季節! 夏休みの自由研究でパストレーシングやりたいですね! 優秀な若人がヘッダーオンリーレイトレーシングライブラリ NanoRT と tinyobjloader で人類史上最速(2 日)でパストレーシングサンプルを作ってくれました(私が十数年前にパストレーシングを実装した時は 1 年くらいかかりましたね... 知の加速を感じますね). 素晴らしいですね! 最高のパストレーシングの夏にしようね! 映画ジャングルブックもパストレーシングだよ! https://www.fxguide.com/featured/out-of-the-pages-and-into-the-jungle-book/ パストレーシングする. $ git clone https://github.com/lighttransport/nanort $ cd nanort/ex
漢なら Parallella(ARM Linaro) でも Docker 動かしたいですね! Raspberry Pi で動いている報告があるので, Parallella でも動くはず! 現時点では動かない が, 現時点ではカーネルをリコンパイルしないとまずは動かないことが判りました. カーネルリコンパイルをする旅に出ます. 果報は寝て待ちましょう. パッケージのインストール Docker は go 言語で記述されているので, go コンパイラをインストールします. なぜか go 言語での websocket のパッケージで hg(mercurial) が求められるので, mercurial も忘れずにインストールしておきましょう. $ sudo apt-get install lxc $ sudo apt-get install bridge-utils $ sudo apt-get i
次のページ
このページを最初にブックマークしてみませんか?
『@syoyoのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く