Category: Linux

【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++と併せて勉強しなければと感じました。これを使って自作ライブラリとか作れればかっこいいなとか思いつつ、次回に向けて精進します。ここまで読んでくださってありがとうございました。

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でのエラーっぽいのですが、より多くの人がこの方法で救われると嬉しいですね。解決方法発見までのプロセスについてもツッコミがあれば改善したいと思います。ここまで読んでくれてありがとうございました。

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実行環境を入れることに成功しました。次回がありましたら、その上で戦国ランスをやっている画像でもアップしたいと思います。ここまで読んでいただいてありがとうございました。

Ubuntuのカスタマイズ #2 Chrome, VSCode, ,Anaconda, Tensorflow-GPU

休職を始めてそろそろ3週間が経とうとしていて、時の流れとは速いものだと感じています。原因となった頭痛は消えていませんが、まだ3週間ならしょうがないかな。さて、今回はUbuntuのカスタマイズ編の2回目ということでTensorflow-GPUのインストールまでを解説します。というより、これをインストールするためにUbuntu22.04をUbuntu20.04にダウングレードしたりするなど多いに格闘したので、備忘録として残しておきます。 Chrome, VSCode, Anacondaのインストール 北陸先端科学技術大学院大学、通称JAISTさんは、Ubuntuを日本語化したイメージを配布しております。このUbuntuをクリーンインストールしたら最初にやるべきことはChrome, VSCodeのインストールと個人的に思っています。また、このイメージにはデフォルトでcurlとgitが入っていないので、それらも最初に入れてしまえば良いです。主な流れは下記の通りです。 ここまでやれば、一通りの環境構築が完了します。ちなみに、私はAnacondaではなくnativeにPythonを配置する方が好きなので、今回の構築はTensorflow-GPUのためにやむ無しという感じで実施しました。 Tensorflow-GPUのインストール 今回、最初はAnacondaを使用せずにTensorflow-GPUを導入することを検討していました。上述の通り、私はAnacondaに苦手意識を持っていたというか、condaコマンドを覚えることが何故かできなくて毎回調べなければいけないことが苦痛でした。しかし、nvidiaの公開しているGPUドライバ、CUDAなどのインストールを手動でやってもなかなか上手く行かなく苦しみました。したがって、皆様には最初からAnacondaを使って環境構築をしてしまうことをおすすめします。(それでも終盤で手動設定が必要な場所があって苦労したのですが) Tensorflow-gpuを動作させる環境の作成 tensorflowでGPUを使う設定(Anacondaを使用)さんが参考になります。ただし、内容が少し古くなってしまっているので、こちらで補足します。まず、condaコマンドでtensorflow-gpuが動作可能な環境を構築します。 conda create -n tf2110 tensorflow=2.11.0=gpu_py39h6d58c08_0 ここで重要なのは最新版のtensorflowを指定した点になります。最新かどうかはconda search tensorflowでの出力から確認できます。この中でgpu_py**となっているものがGPU対応のtensorflowになります。今回の目的はTensorflow-gpuの環境構築なのでこちらを選択しております。 補足: なぜ最新版を選択するのか optunaでweight_decayをパラメータに設定している場合、weight_decayが2.11からしか設定されていないために古いtensorflowでは動作しないというパターンにぶつかりました。そのため、可能な限り最新版を選択してこのような苦しみを避けることが大切だと思います。この問題についてはQA等はみつかりませんでしたが、公式ページからweight_decayが追加された時期を確認できます。 libdevice not found at ./libdevice.10.bcへの対策 さて、tensorflow-gpuも無事にインストールできたし、基本的なプログラムなら上手く動作しているから安心安心。。と思っていたら表題のようなエラーメッセージが出てきてしまった。これについて調べて見ると同じようなGithubのIssueがあることが判明した。提案されている解決法の殆どは上手く行かないのだが、最後の方にあるSolutions so Farのみ上手く作用したので、ここでも載せておく。まずは提案されている生コードを下記に示す。…

Ubuntuのカスタマイズ#1 LINEの追加とGUIの変更

今週は頭痛がひどく殆ど寝ていたRockinWoolです。寝る→PCいじる→妻と生活→寝るという最高に幸せな環境で体調は少し改善していますが、それでも頭痛が残っています。なので悪い人の下で働き続けてダメージを受けるとこうなるのだなと体感しながら日々を過ごしています。さて、今回のテーマは「Ubuntuを新規インストールした際にやっておきたいこと その1」です。まずはLINEのインストールとGUIの変更について、参考になったサイトを紹介しながら説明していきます。 LINEのインストール Qiitaにある「【UbuntuでLINE!?】 UbuntuでLINEを使う方法を画像付きで説明する(@north_redwingさん)」を参考に進めます。基本的には書いてあることをまったくそのままやれば上手く行きます。しかし、この方法には一つ落とし穴がありました。 LINEの更新時にアイコンが透明になる問題について LINEのアイコンは、/home/""username""/.local/share/applications/chrome-"app-id"-Default.desktopに対して、Icon=/home/"username"/.config/google-chrome/Default/Extensions/"app-id"/"app-ver"/res/img/line_logo_128x128_on.pngを書き込むことによって設定していました。察しの良い方は気づかれたかもしれませんが、Iconのパスに”app-ver”が含まれていますね。これによって、LINEに自動更新が入りバージョンが上がるとパスが失効してしまいます。結果としてアイコンが透明になるわけです。 LINEアイコンの透明化を回避するための策について さて、原因が分かれば対策は簡単です。要はapp-verの含まれない場所に画像をコピーし、そこを参照すれば良いわけです。なので、/home/"username"/.config/google-chrome/Default/Extensions/"app-id"/"app-ver"/res/img/line_logo_128x128_on.pngを/home/"username"/.config/google-chrome/Default/Extensions/"app-id"/ディレクトリへ移動し、Iconのパスをそこへ設定すれば解決します。 GUIの変更 「【Linux】Ubuntu22.04をMac風にカスタマイズする(macOS Ventura風)」さんを参考に進めます。ただし、この記事にある内容は結構ボリューミーなので、少し選んで入れていきました。 お気に入りアプリを表示する場所を画面下に変更する 上記記事を紹介しておきながら、早速その中に存在しないGUI設定になります。これはUbuntuの設定から変更できます。実は今回の目的はこれを達成することでした。複数ディスプレイでUbuntuを使う際に、メインにしか表示場所が無いと不便でしたので。下記に設定方法がわかる画像をおいて置きます。 まとめ 今回もここまで読んでくださってありがとうございました。皆様のPC遊びライフの一助になれば幸いです。 参考文献 【UbuntuでLINE!?】 UbuntuでLINEを使う方法を画像付きで説明する【Linux】Ubuntu22.04をMac風にカスタマイズする(macOS Ventura風)