Author: RockinWoolWalker

【pybind11】Pythonが重すぎるのでC++に手伝ってもらう

こんにちは。RockinWoolです。今日はpybind11を使ってpythonの一部処理をC++に置換して高速化することを目指します。私はかねてからPythonの処理があまりにも遅すぎることに悩んでました。このせいで、実験がうまくいかなかったり、プログラムの完了までに1ヶ月近い時間がかかったりしていました。ChatGPTにこのことを相談したらpybindが初心者向けで良いとの回答をもらったので、今回はこの悩みを解消すべく環境構築していきます。 pybind11の導入 今回はanaconda環境に導入する方法を示します。pipで管理している人はcondaコマンドやLinuxのPATH情報を適宜入れ替えて貰えれば問題無いと思います。まずはpybind11をcondaでインストールします。 ビルドの設定 次にCMakeLists.txtの準備をします。余談ですが、今回作成するプログラムはnetworkxで作成した複雑ネットワークを取り扱うことを考えています。ですので、C++のファイル名はload_network.cppとしてtoolsetライブラリ内に配置するとしました。つまり、CMakeLists.txtから見て下記のような配置になっています。 CMakeLists.txt|-build |- load_network(ビルド後生成物。pythonで呼べる)|-toolset |-load_network.cpp この状態におけるCMakeLists.txtはこんな感じになります。condaのbase環境にpybind11を入れているので、特定の環境に入れている場合はenvs//includeのように置き換えてください。 cmake_minimum_required(VERSION 3.2)project(pybind_test VERSION 0.1.0)find_package(pybind11 REQUIRED)find_package(Python REQUIRED)include_directories(/home//anaconda3/include)include_directories(/home//anaconda3/include/pybind11)link_directories(/home//anaconda3/lib)pybind11_add_module(load_network ./toolset/load_network.cpp) C++プログラムの本体 そしてload_network.cppの本体を下記のようにします。 1行目はpybind11を使うために必要な呪文、2行目はpythonのリスト型を扱うために必要な呪文という感じです。プログラム的には引数をそのままリターンする関数なので特別な処理はしていません。PYBIND11_MODULE(load_network, m)以降は完全に元記事を参考にしただけなので意味は良くわかっていませんが、ビルド後に関数呼び出しをする際に必要になる設定だと思っています。上記のload_network.cppをCMakeLists.txtを使ってビルドすればload_network~~.soができるので、これをtest.pyと同じ階層においてtest.pyから呼び出せば機能します。なので次はtest.pyを作りましょう。 呼び出し元のPythonプログラム あまり言及することはありませんが、c++で作ったライブラリが存在していると仮定してそのまま実装すれば機能します。す、すごい! まとめ pybind11はcondaコマンド一発でインストールできるので、かなり使いやすいと感じました。また、cmakeに馴染んでいることが条件になってきそうなので、c++と併せて勉強しなければと感じました。これを使って自作ライブラリとか作れればかっこいいなとか思いつつ、次回に向けて精進します。ここまで読んでくださってありがとうございました。

つぶやき: 最近感じたこと&Stable-diffusion

こんにちは。RockinWoolです。今日はUbuntuにStable-Diffusionを入れて遊んでみたので、その日記を残したいと思います。とは言っても、インストール方法やセットアップに関してはこちらに非常に細かく書いてあります。ですので、今回は最近の人生で感じていることなどを書き散らしていこうと思います。 何故いまさらStable-diffusion? つい先日、Deep Neural NetworkのモデルをPythonで作って回す機会がありました。しかし、私のPythonの書き方が悪いのか非常に重い処理となり、PCを4台並行にぶん回してようやく一通りの結果を算出できるという有様。そして、計算後にはPCが余ってしまいました。しかし、これらは私がAIを回すために作ったものであり、放置して劣化させるのは非常に勿体ない!そこで、なにかに活用できないかと考えていきついたのがStable-diffusionでした。 それはそれとして、このPCの活用方法と考えたときに色々やりたいことが出てきて、自分の中の欲望をちゃんと整理して生きていかなければと思いました。例えば、pythonの処理が重いのでc++でパッケージを作ってpythonから呼べるようにしたい!とか、英語を喋れるようにしたいのでチャットボットを作りたい!とか、昔作った3Dモデルを改良してチャットボットと融合させて完全AIのVtuberを作りたいとか、Atcoderやるためにc++練習しなきゃとか。あとはお金さえあればJetsonを買って自動運転の実装をするとか。自分はやりたいことが無限に出てくるタイプなので、普段からこまめに消化しなきゃと改めて感じました。それだけに、仕事の関係で頭痛持ちになったのが悔しい。動ける日の最大火力が減ってしまって、すごく不便です。(そういえば、休職した元職場に居た同僚がまた一人転職で職場を離れることになったので、まずは前進できてよかったと思うなど) Stable-Diffusionインストール 検索して最初にヒットするStable-diffusion-webuiはインストール後にpytorchがエラーを起こしてうまく動作しなかったので、Easy-diffusionと呼ばれる別のアプリを用いてStable-diffusionを試しました。そうすると、Easyとついているだけあって簡単にインストールすることができました。 結果サンプル 1個10分もかかって草。ちゃんとしたGPUの環境でやるほうが吉ですね。 まとめ 思い立ったときに一気に進めるのも良いけれど、自分の人生を計画的に進めることも大切ですね。それはそれとしてStable-diffusionは面白かったです。

Ubuntuのカスタマイズ #3 VSCode + LaTeX環境

こんにちは。9月中旬にも関わらず今月初投稿になってしまったRockinWoolです。ここ最近は富士山登山やピアノの発表会など、休職期間を活かして普段はできないことに全力を注いでました。病院から処方される睡眠導入剤?との相性がすこぶる良いようで、かなりの悩みごとがあっても寝れるようになったことが大きいですね。かつての上司によって傷んだ部分が少しずつ良くなって集中力も改善されたように感じます。さて、今回はその勢いでVSCode+LaTeXをUbuntuに導入した備忘録をまとめてみました。私のようにPCを頻繁に分解して初期化する輩にとってLaTeXは毎回どうやって入れたのか思い出すが難しいソフトです。最近はVSCodeに良い拡張があるとのことでしたので、これをうまく活用してやって行こうと思います。 TeXLiveのインストール LaTeXはそもそもコンパイル環境がなければ使えません。ということで、まずはTeXLiveをインストールします。下記コマンドでダウンロードと解凍までやりましょう。 無事にインストーラが解凍できたら下記コマンドでインストールができます。インストール完了後にターミナルにてPATHの追加を求められるので、exportで追加しておきましょう。.bashrcに追記することも忘れずに。今回はPATHは私の環境での値を書いていますので、皆さんの場合は画面を見ながら指示にしたがってほしいです。 ちなみにこの後sudo権限でインストールしたコマンドを使うタイミングがあるのでvisudoでsecurity_pathにも`/usr/local/texlive/2023/bin/x86_64-linux`を追加しておく必要があります。 日本語対応ライブラリのインストール 無事にPATHが追加できたら下記コマンドで必要なライブラリを追加インストールします。これでTeX環境が日本語に対応することになります。 ここでの注意点はsudo権限を使ってのインストールであることです。security_pathにパスを追加していないとここでヘタることになります。 LaTeX-Workshopの導入 ここからはVSCodeでの作業になります。VSCodeの左側にある拡張機能ボタンからLaTeX Workshopを探してインストールします。その後、VSCodeの左下にある設定歯車から設定を選択して、latex-workshop.latex.recipesと検索します。settings.jsonで編集すると出てくるので、latex-workshop.latex.recipesの部分を下記で上書きします。settings.jsonには他の拡張の情報も乗っているので、あくまで該当部分の上書きに留めてください。ちなみにこの情報源はTeXwiki様です。年々アップデートされているようですので、失敗したら最新版を追うことをおすすめします。 “latex-workshop.latex.recipes”: } ], “latex-workshop.latex.tools”: } ] すべてが完了したら.texファイルをctrl+sでセーブするごとにビルドが走ってpdfが生成されるようになります。ヤッター。 エラー対処法 さて、LaTeX初心者、ひいてはTeXLive初心者である私はもう少しインストールに苦労しました。というより、.texの自動ビルドがうまく行かずに止まることが何度かありました。覚えている範囲で対処法をメモしておきます。 自動ビルドが走らない まずこの現象に遭遇したら、エラーの切り分けを試みてください。主に下記3つの可能性があります。 このとき、まずは上から対応することを心がけましょう。これは持論ですが、VSCodeのような自動化ツールは、その大本となるツールがバグっていれば当然正しい挙動をしてくれません。つまりは根本の方を優先して調査したほうが早く解答にたどり着くわけです。これは自戒を込めて強調しておきます。さて、まずはTeXLiveの動作確認をしましょう。LaTeX, サンプルみたいに検索して出てきた適当なサンプルコードをptex2pdfでビルドできるか確かめてください。このとき、ptex2pdfが見つからなければ何らかのインストールエラーまたはPATHの設定ミスがあり得ます。逆にptex2pdfが動作するにも関わらず途中で止まる場合は.texの書き方が悪い可能性があります。エラーメッセージを調べると良いでしょう。私はサンプルコードを手動でビルドすることができたのですが、このときにサンプルコードの日本語指定が私の環境と異なっていたため、インタラクションを必要としてました。なのでVSCodeの自動化が途中で止まってしまったわけです(settings.json内に-interaction=nonstopmodeを記述しているため、この場合はエラーで止まる)。無事日本語の設定を直せばビルドに成功するようになりました。 PDFがVSCodeで見れない VSCodeでPDFを見ようとすると’ServiceWorker: The document is in…

Ubuntuのカスタマイズ #2.5 Tensorflow-GPU(GTX-3080ti固有のバグ?)

こんにちは。最近頭痛に対抗して運動をしているRockinWoolです。会社から休職の手当と書類が送られてくるのですが、よりにもよって体調を崩す原因となった上司から送られてくるので、毎回憂鬱になります。個人的にはお金をいただけても全然嬉しくないというか、理不尽な目に合わなければ頭痛とお付き合いする必要もなかったしお金ももっと入っていただろうので、単純に互いに損しているだけなんですよね。 さて、今日はちょっと前に上げていたTensorflow-GPUのセットアップが固有のGPUでは失敗する現象を発見したので、これについて解決策を補足させていただきます。 GTX-3080Tiを積んだPCでTensorflow-gpuがセットアップできない まずはバグの概要から。上記GPUを積んだ状態でTensorflow-gpuをインストールすると次のような状況に遭遇します。なおlibdevice not found at ./libdevice.10.bcの問題は既に解決済みであるとします。上記エラーの解決方法は前回記事を参考にしてください。 エラーメッセージは下記の通りです。 正: ptxasが足りていない, 誤: ptxasが起動できない さて、エラーメッセージが出たらまずは同様の事例が無いかWebで確認!(クソザコ思考)。似たようなエラーとしてはここのIssueなんかがありました。解決法として、ptxasへのPATHを追加することが挙げられていたので早速挑戦してみると・・・、あれ?find / -name "*ptxas*"で何もヒットしないぞ?しかもエラーメッセージに書いてあるnvptx_compilerすらヒットしない。これは、つまりパッケージが足りていないということでは? condaでcuda-nvvcをインストールする必要があった さて、パッケージが不足していることは分かったのですが、それじゃあ一体何を入れれば良いのかということになりました。ということで、心当たりのあるパッケージを一通り入れたり外したりした結果、最終的にはここに書いてある下記のコードを実行する必要があったという結論になりました。 このためだけに、Ubuntuの再インストールとかいろいろ大規模に調査したのですが、結果としてはtensorflow-gpuのインストール時にcuda-nvccが自動的に入らないことが問題だったようです。こんなの他にも同じような症状の人が発生しそうですね・・。 まとめ とりあえずINTERNAL: Failed to launch ptxasのエラーで悩んでいる方はconda install -c nvidia cuda-nvccでnvccをインストールすることを試してみてください。今の所固有GPUでのエラーっぽいのですが、より多くの人がこの方法で救われると嬉しいですね。解決方法発見までのプロセスについてもツッコミがあれば改善したいと思います。ここまで読んでくれてありがとうございました。

人生初の韓国へ行ってきました(済州島)

こんにちは。RockinWoolです。今回は表題の通り韓国に行ってきたので、街の様子や感じたことなどをツラツラと書き記しておきます。日記的な記事になりますが、なにとぞよろしくお願いします。 旅の目的 CIJK Conferenceという国際学会に参加するために済州島に行きました。正直ここのところ頭痛がひどく、一日が現実感なく過ぎることがほとんどでした。しかし、なんとかAbstructを提出して参加することができました。毎度の挨拶みたいになっていますが、職場の上司に振り回されて体を壊すくらいまで働くのは意味が無いです。こんな人間になってしまいます。 済州島の様子 済州島は沖縄本島よりもやや大きいくらいの面積を持つ島で、朝鮮半島と中国大陸、および日本列島のちょうど中間に位置しています。関西国際空港から直行便があるので、1時間ちょいで行くことができます。しかも、時差が全くないので時差ボケも心配無用。一方で、日本より西にあるのに時差が無い影響から、夜20:30になっても外が明るいなどの不思議な現象も発生していました。学会が18時に終了しても、普通にビーチで泳いでいる人がいたりして、なかなか不思議な光景でしたね。ちなみに街並みはかなり古びていて、少し寂れたリゾート地という感じでした。インフラも傷んでいたり、店や家が小さい作りだったりして不景気な感じがしました。 CIJKの様子 国際学会とはいえ、あまり日本の学会と大きな差はありませんでした。もちろん規模は大きいので夕食やエクスカージョンなどのイベントは山盛りでしたが、会場が立派で緊張するなどのことはありませんでした。逆にちょっと面白いと思ったのは参加者の熱です。韓国の学生が英語の質問に答えることができず韓国語で答えようとしたところに、中国?の先生が「英語で答えられないのはサイエンティストとしての資質に欠ける」となかなかの剣幕で怒っていたのが印象的です。自分もそのようなことを言われないように頑張ろうと思いました。 英語でのコミュニケーションについて 今回の学会では終始英語でのコミュニケーションが必須でしたが、自分の中では結構上手に乗り切ることができたと感じています。事前に入れておいたKAKAOTALK(日本でいうLINE)が役に立ったり、英語でポスターセッション参加者とやり取りをして仲良くなったり、良い経験が沢山ありました。自分の発表では、事前に原稿を作ってノートに転写しておき、ある程度暗記して臨みました。結果としてはまあまあでしたが、後日他の先生から英語がうまいとほめられたので満足できました。今後も精進しようと思います。 海外で頭が痛くなったときの対処法 学会中も仕事でのトラウマがよみがえったり、理由もなく緊張して頭が痛くなることがあったのですが、薬が手元にない時は横になれるところを探して休んでいました。例えば、今回はビーチが近くにあったので砂浜で横になったり、ホテルのロビーにあるソファーで休んだりしていました。ホテルのロビーで寝ているときにスタッフに声をかけられたときは緊張しましたが、翻訳ツールを使って状況を説明してなんとか事なきを得ました。済州島は1割くらいの店員が日本語または英語をしゃべることができますが、ほとんどの人は韓国語しかしゃべることができません。この辺は日本人とまったく同じように感じます。ですので、旅行に行く際は翻訳ツールを手元にインストールしておいてから行くとよいと思います。また、フリーwifiがいたるところにありますが、より万全を期すのであればレンタルwifiが良いと思います。今回はレンタルなしで何とか乗り切りましたが、結構ほしい場面があったのでお勧めします。 まとめ 済州島は過ごしやすくてとてもおススメできる場所でした。SEの電源変換機とモバイルWifi、翻訳ツールをもっていけば特に恐れることもなく過ごすことができると思います。4日間の滞在でしたが、格安で行けるタイミングでまた行きたいなと思うことができました。それでは、ここまで読んでくださってありがとうございました。

Ubuntuで戦国ランスをやりたい!(Virtual Boxのインストール編)

最近もずっと頭痛に悩まされているRockinwoolです。口腔カンジタのようなものにも罹患し、あまり体調が良くない状況が続いていてハゲそうです。そんな私は自宅のメインPC(Ubuntu)をTVに繋いで作業をしているのですが、妻より「久しぶりに戦国ランスとかやりたい」と言われてしまいました。そうなると、Windows用ソフトである戦国ランスをUbuntu上で動作させるために何らかの工夫が必要です。ということで、今回はUbuntu上にWindows環境を動作させるためにVirtualBoxを使って行こうと思います。VirtualBoxとはなんぞや?という方のために簡単に説明させていただきますと、こいつはPC上に仮想的にPCを用意するソフトになります。この仮想的なPCの事を通称Virtual Machine, 略してVMと呼びます。VM上には好きなOSを載せることができるので、Ubuntu上にVMを用意→その上にWindowsを動作させるのを目的に今回はやっていきます。 Virtual Boxのダウンロードとインストール VirtualBoxのダウンロード方法はQiitaやRedditなどにたくさん書いてありますが、すべて嘘です。(というのは言い過ぎかもしれないですが、信じていい情報ではありません。)というのも、かなり古い情報や今は推奨されていないQt4を要求するものだったりするからです。自分はQt6が最新であることを偶然知っていたため、これらの情報を鵜呑みにせずに済みました。そういうことで今回はまず、Oracle公式サイトからdebパッケージをダウンロードして、インストールすることにしました。やっぱり開発元のサイトに行って、自分で調べてからインストールするのが一番安全ですね。ダウンロードあとは保存先に移動して、下記コマンドを入力してインストールします。dpkgだとQt6などの依存ライブラリを持っていない場合に失敗するので、依存ライブラリごとインストールしてくれるapt-getを推奨します。 sudo apt-get install ./virtualbox…… Windowsのディスクイメージをダウンロードする VirtualBoxをインストールできたら、次はWindowsを準備します。通常Windowsは購入時にCDが付属で付いてきて、その中にディスクイメージが入っていると思います。しかし、今回は購入時点からUbuntuを入れて使ってきたPCであるためディスクイメージはありません。「ここで詰んだか・・」と一瞬思いましたが、調べてみるとWindowsのディスクイメージもWindows公式サイトからダウンロードできることが判明しました。マイクロソフトもなかなかやりますね! Windowsのプロダクトキーについて さて、VirtualBoxとWindowsディスクイメージの2つが揃ったら、あとはVirtualboxでVMを作成して、その中にWindowsをインストールするだけです。このあたりの作業はUbuntuでもWindowsでも大差ないので割愛します。ただ、今回は独自のエラーにも遭遇しました。Windowsのインストール時にWindowsのプロダクトキーを持っていないと駄目と言われてしまい、これ以上進めなくなる現象です。当然プロダクトキーなんてものは持っていないため、本当に詰んだ状況になりかけました。しかし、今Ubuntu機として使っているサブノートPCはかつてWindows機だったため、プロダクトキーを持っている可能性があります。ここで、Windows公式のFAQを見てみると、一般小売業者からWindows込みPCを購入した場合は、PCにプロダクトキーが書いてあるとのこと!これによって、以前の記事でUbuntuを入れて復活させたノートPCに貼ってある、前世のWindowsプロダクトキーが判明したため事なきを得ました。 Windowsに登録されている電話番号!? さて、上記の問題を解決したあとに、もう一つ困った状況に遭遇しました。Windowsに登録されている電話番号について聞かれ、答えないと進めないのです。登録した電話番号なんてものはなく、自分のスマホの電話番号を入れてみても全然うまくいかず、ついに詰んだか・・・と思いきや。Skypeの名前でも良いようなので、入れてみるとうまく行きました。大学時代に、少し陽キャになるように頑張ってSkypeを入れた自分を評価したいですね。(年代バレしそう) ここまでのまとめ そういうことで、いろいろ問題がありましたがUbuntu上にWindows実行環境を入れることに成功しました。次回がありましたら、その上で戦国ランスをやっている画像でもアップしたいと思います。ここまで読んでいただいてありがとうございました。