Moiz's journal

プログラミングやFPGAなどの技術系の趣味に関するブログです

自分のtodo.txt運用メモ

先日こんな記事がホットエントリーに上がっているのを見ました。

qiita.com

なんと、マイナーなTODO管理メソッド、todo.txtが紹介されているではないですか! 自分はここ数年仕事関係のタスクはほぼすべてtodo.txtで管理しているヘビーユーザーです。これは便乗して布教に協力するしかありません。
todo.txt自体の説明は上記の記事が詳しいので、ここでは実際に自分がどういう形で運用しているか、紹介します。

何故todo.txtが良いのか。

まず、自分にとってのtodo.txtの利点はこんなところです

  • ポータブル
    ファイル一つでツールに基本的に依存しないので、複数環境での共有が簡単
    環境を変わるのもファイルコピー一つで楽
  • 軽量
    ファイル一つなので。フロントエンドツールを使うにしても、テキストベースなので軽量
  • 柔軟
    テキストで一行に書けることならなんでも書ける。ルールはあるが無視しても良いし、独自ルールを足してもよい
    例えばドキュメントのURLを書くこともできる。
  • GTDとの親和性
    自分はもう十年以上GTDを実践してきているので、GTDに向いているというのは大きな利点です。他のツールだと、自分のワークフローと微妙にあわないところが出てきてしまい、不便を強いられる事がありますが、todo.txtならそういうことはありません。

「柔軟性」についてですが、先ほど紹介した記事についたブックーマークを読むと、todo.txtの形式について、ガチガチに決まっていると思ってしまった人がいるようで残念です。形式はあくまでガイドラインで、自分の用途にあわなければ変更して構いません。ガイドに従うとフロントエンドツールとの連携がしやすいという利点はありますが、それだけです。

使用する形式について

じゃあ自分がどういう形式で使っているかというと、こんな感じです。

基本的に使用する要素

  • Project (+)
  • Context (@)

これだけです。

補助的に使用する要素

  • Priority (A/B/C)
    次にやるタスクを目立たせるのにだけ使う。例えば今日はせめてこのタスクを終わらせようというものにBのプライオリティをつけて目立たせる。次にやるタスクにAのプライオリティをつける。それ以外、基本的にはつけない。

  • 日付 (Creation Date, Completion Date)
    自分ではつけないけれど、フロントエンドツールが自動でつける分には削除しない

  • 期限
    たまに気が向いたら使う。(あまり役にたっていない)

サブプロジェクト

todo.txtにはサブプロジェクトを示す形式は明確には決まっていません。自分はこんな感じに運用しています

  • メインプロジェクトについてプロジェクト名を決める
    例えば、車の修理なら+FixCarなどになります

  • サブプロジェクト名はメインプロジェクト名とサブプロジェクト名を_で繋げる
    例えば、車の修理の予約は+FixCar_MakeAppointmentになります

こうしておくと、+FixCarを検索すると、+FixCarと+FixCar_MakeAppointment両方のタスクが見つかります。

コンテキスト

自分の仕事は基本的にオフィスまたはホームオフィスでコンピュータの前でやるので、本来の意味のコンテキストだと、ほとんどのタスクは@Computerになってしまいます。これではコンテキストの意味がないので、こんなコンテキストを設定しています。

  • @Computer
    普通の「仕事」。ドキュメントを書いたり、コードを書いたり・読んだり、などなど

  • @Respond
    メールやチケットの返事など、誰かの仕事をアンブロックするタスク

  • @Review
    読んでおかなければならない資料など。受け身のインプット

  • @Anywhere
    上記以外の仕事で隙間時間などにできる小さなタスク

  • @Agenda
    誰かと話すときのためのリマインダー。ミーティング時のトピックのメモにもなる

  • @Reference
    必要な書類のURL、Gmail上の特定のメールへのリンク、など、プロジェクトに必要なリファレンス

  • @Wait
    誰かを待っているというリマインダー。GTDのWait Forのためのもの。

  • @Idea
    タスクに分解する前のぼんやりしたアイデアの一時退避用。ウィークリーレビューでかならずタスクに分解する

  • @Someday
    GTDのSomeday Maybe用のもの。実際にはタスクの墓場に近いのが悩み

  • @Office
    オフィスで実際に自分が体を動かして行うタスク。例えば、セキュリティバッジの更新作業など

実際の流れ

環境

自分はtodo.txtの本体は自分の仕事環境からアクセスできるネットワーク上においています。
これで、複数環境(ノートPCとデスクトップなど)から同一タスク群にアクセスできます。

フロントエンドとしてはtodo.txt-cliを使っています。

github.com

例えばTake a vacationというタスクを追加したければ、コマンドラインからこんな風に入力します。

$> todo.sh add Take a vacation

タスクの追加

例えば、何か解決しなくてはならない問題が書かれているメールを見た場合、次のような流れでタスクを設定します。
例として、誰かが自分の書類に不備を見つけたとします。

  • プロジェクトを作る
    プロジェクト名はぱっとわかるものにします。すでにこれが大きなプロジェクトの一部の場合サブプロジェクト名をつけます。
     例えば既存のプロジェクトが+Icarusだとすると、こうなります
    @Project +Icarus_DocAFix Correct the spec doc A for project Icarus https://url.of.the/email/link
    GmailなどではメールのURLが取得できるので、いっしょにはりつけておきます。

  • タスクを決める
     必要なタスクを追加していきます。この場合、こんな感じになると思います

    • ドキュメントの不具合を確認する
      @Review Review the comment in doc A about spec mismatch +Icarus_DocAFix https://ursl.of.the/doc/link

    • スペック修正のチケットが必要なら、チケットを発行
      @Computer File a ticket for spec update +Icarus_DocAFix https://ursl.of.the/doc/link

    • スペック更新について、他チームのリーダーと話し合う
      @Agenda with Team A lead - Spec update +Icarus_DocAFix https://ursl.of.the/doc/link

    • ドキュメントレビューの終了を待つリマインダー
      @Wait for Team B to complete the doc update review +Icarus_DocAFix https://ursl.of.the/doc/link

タスクの消化

前述の通り私は`todo.txt-cliを使っているので、こんな流れになります。

  • 先ずプロジェクトまたは、コンテキストのリストを出す
    todo.sh lsc
    todo.sh lsprj

  • 出てきたタスクの中から次にやるものにプライオリティをつける(単なるリマインダー)
    todo.sh pri 12 A

  • 実行したタスクを消す
    todo.sh do 12

もちろん、todo.txt-cliを使わずテキストファイルをそのまま編集しても構いません。 臨機応変さがtodo.txtの強みです

そのほか

他には基本的にGTDに従って運用しています。
特にウィークリーレビューは重要だと思います。

終わり

以上、自分がどのようにtodo.txtを使っているか紹介してみました。
これはあくまで自分の例なので、まったく同じフローが役立つ人はあまりいないと思いますが、todo.txtは実用にも耐えうるツールだという例としてとっていただければ幸いです。

 

備忘録:Ubuntu 24.04LTSで、Realtekの8126用ネットワークドライバを動作させる

表題にあるとおり、個人的な備忘録です

 

問題点

ROG STRIX X870E-Eで組んだPCにLinuxUbuntu 24.04LTS)をインストールしたところ、ネットワークモジュールが認識されなかった。

 

原因

1. Ubuntu24.04LTSは標準ではRealtek 8126用のドライバーを持たないか、なんらかの原因で動作しないようだ

2. 後からドライバーをインストールした場合、Ubuntuカーネルモジュールに署名を要求するためそのままでは動作しない。

 

解決策

1. 対象の確認

マニュアルをみてもどんなデバイスが使われているかわからない。マザーボードメーカーのWindows用のドライバーダウンロード情報からRealtek製であることはわかったので、Realtekをキーワードにlspciで調べる。

自分の環境ではこんな結果がでた。

$> lspci | grep Realtek

0a:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8126 (rev 01)

 

Realtek 8126というネットワークコントローラーのようだ

 

2. ドライバーのインストール

Realtek8126のLinux用ドライバーはここにある。

www.realtek.com

ダウンロードして、対象ディレクトリでsudo ./autorun.shを実行。

ただしこの時点では、モジュールに署名がされていないので、モジュールのロード時にエラーがでてデバイスが認識されない。

 

3. セキュアブートにSSL鍵を登録する

まず、こちらのStackExchangeの回答(53)を参考にSSL鍵のペアーを作り、セキュアブートに登録する。サインの工程(2. Sign the module)は次に行う。

askubuntu.com

4. ドライバーのカーネルモジュールにサインする

autosh.shを参考にすると、対象のモジュールは次のコマンドで見つけられそうだ。

$> echo $(find /lib/modules/$(uname -r)/kernel/drivers/net/ethernet -name realtek -type d)

/lib/modules/6.8.0-49-generic/kernel/drivers/net/ethernet/realtek

自分の現時点の環境ではこのパスだったが、これは環境などが変わるとそれにつれて変わるはずなので、毎回しらべる必要がある。

このフォルダを探すと次のモジュールが見つかった。

/lib/modules/6.8.0-49-generic/kernel/drivers/net/ethernet/realtek/r8126.ko

対象モジュールがわかったので、上記のStackExchangeに従いモジュールをサインする(実行時、/path/to/moduleの部分をr8126.koへのフルパスに変える)

これでモジュールがロードできるようになっているはず。

 

5. 動作確認

モジュールをロード

$> sudo modprobe r8126

次のコマンドを実行するとモジュールの情報が表示されるので、ロードできていることが確認できた。

$> lsmod | grep r8126

r8126                 208896  0

Ubuntuのネットワーク情報にも表示されるようになった。

ネットワーク設定

PCI Ethernetというものが表示されており、マザーボード上のイーサネットモジュールが動作していることがわかる。

 

まとめ

あたらしいデバイスLinuxで使おうとすると、いろいろ罠がある。

 

その他1

DMKS対応ドライバーというものがGithubにあったがうまく動作させることができなかった

github.com

その他2

この調子でWIFIも動作させようとしたが、使われているMediatek 7927用のLinuxのドライバーがまだないようだ。

https://forums.linuxmint.com/viewtopic.php?t=433401

 

追記

しばらくたったらまたネットワークドライバが使えなくなった。

しらべたところ、セキュアブートへの公開鍵の登録がなくなっていた。その前にBIOSアップデートをしたのでそのせいではないかと思う。

mokutilを使って鍵を再登録したらまた使えるようになった。

ラズベリーパイ5が届いた

開封と外見

以前注文していたラズベリーパイ5が届いた

ラズベリーパイ5箱の外見

内容物の確認。本体と極簡単な説明書類のみ

同時に買ったヒートシンクをつけてみる

 

OSのインストール

こちらのページからRaspberry Pi Imagerをダウンロードして、Raspberry Pi OSをSDカードに書き込み。以前にくらべても楽になった。*1

www.raspberrypi.com

Raspberry Pi 5では64-bit版が推奨になったようだ

Raspberry Pi5では64-bit版が推奨になったようだ

これをラズベリーパイ5に入れてスイッチ入れて即起動。

 

ラズベリーパイ5起動画面
USB Type-Cで電源をUSBを同時使用

せっかくなのでNexdock 2につないで使いたい。

uzusayuu.hatenadiary.jp

もしかして、と思いUSB端子をそのままNexdock 2に接続してみたが、電源の供給はされるもののキーボードもタッチパッドも認識されない。

検索してみたところ、HWの機能としてはサポートしているが、ソフトウェア側の対応(Bootloader、EEPROM)が遅れているようだ

github.com

そこで、sudo rpi-updateとsudo spi-eeprom-updateを行い、config.txtに以下の行を追加したところ、無事USB Type-Cケーブル一本で電源供給とキーボードの接続両方ができるようになった。

dtoverlay=dwc2,dr_mode=host

Nexdock 2とラズベリーパイ5

できればUSBケーブルでディスプレイも接続できればさらに楽だったのだが、そこは生来に期待。

さてどんな事に使おうかな?

 

*1:ただ、Mac版では途中でエラーがでてすすまなかったので、Windowsでやり直した

FreeBSDをインストールしてみる

長いことUnixを触ってないので、FreeBSDを実機にインストールして触ってみたくなりました。 たんなる作業メモで、特別な知見はありません。

環境

手元に使わなくなったNUC6CAYがあったのでこれを使います。

スペック

項目 内容
CPU Intel Celeron J3455
メモリ 8 GiB (拡張済み、もとは2 GiB)
ストレージ 1 32 GiB eMMC (オンボード)
ストレージ 2 Kingston SATA SSD 120 GiB (あとから追加)

もとはWindows 10が入っていたのですが、さすがにスペック的にきつくなり、使用頻度がさがったものです

モニターとして以前紹介したNexdock2を使用しました。
モニター・バッテリー・キーボード・USBハブ一体型のものです。

FreeBSDのインストール

インストールはFreeBSD公式サイトのガイド通りに行いました。 また、福山大学金子邦彦研究室FreeBSDインストールガイドがとても親切で参考になりました 以下は作業ログです。

インストール時の設定は、基本的にデフォルトで問題ありませんでした。変更したのは以下の部分です

  • ホスト名がよくわからないので適当な名前(NUCとか)を入れた
  • Optional System Componentでパッケージ類をすべて選択
    • この後のダウンロードサイト選択肢にエラーを誘発発生する物があった(理由不明)。インストールをやりなおし、リストのトップのものに変更してインストール成功
  • ディスクのフォーマットとしてZFSを選択し、ZFSのConfigure Option->Pool Type/DisksからStripeを選択し、インストール先SSDを指定
  • WIFIアダプタを選択し1DHCPを使用
  • タイムゾーンとしてPDTを選択(起動後時間がずれていたので、コマンドラインから修正)
  • Serviceの設定、mmoused、powerdを選択
  • ユーザーを追加し、cshを設定(インストール後にbashに替えます)

これでリブートするとログインできるようになっていました

起動後の設定

以下、起動後に行った設定です

ユーザーをsudo可能グループにいれる

# sudo pw group mod wheel -m username 

/usr/local/etc/sudoersの以下の行をアンコメント

# %wheel ALL=(ALL:ALL) ALL

シェルをbashに変更

まずbashをインストール

# sudo pkg install bash

デフォルトシェルをbashに変更

# chsh -s /usr/local/bin/bash username

.profile.bashrcを読み込むように以下の行を追加

if [ -n "$BASH_VERSION" ]; then
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    if
fi

再起動後bashが使えるようになります。この後.bashrcを変更し自分の好みの環境に変更しました。

GUI環境

FreeBSDインストーラーはGUI環境はインストールしないので、自分で設定します。 以下、作業ログです。

Xorgのインストール

公式サイト2の説明に従いX Window Systemをインストールします

# sudo pkg install xorg
# pw groupmod video -m username

NUC6CAY独特の設定

# sudo pkg install drm-kmod   
# sudo sysrc kld_list+=i915kms
  • 公式ガイドのTipに従い、そのほかのドライバーもインストールしました
# pkg install libva-intel-driver mesa-libs mesa-dri
  • デフォルトではNexdock2のタッチパッドが認識されないので、再起動の前に追加でドライバーをインストール3
# sudo pkg install xf86-input-synaptics

デスクトップの環境のインストール

今回は軽そうなXFCEを選びました
公式ガイドにしたがってインストールし再起動するとXFCEで立ち上がります。

ブラウザのインストール

次のコマンドでChromiumがインストールできます

# sudo pkg install chromium

これでchromechromiumが起動しますが、日本語が文字化けします

日本語フォントの設定

こちらのブログを参考にフォントを設定しました

symfoware.blog.fc2.com

参考にしたブログにならいipaフォントを選択します

# sudo pkg install ja-font-ipa-00303_7

これで、Chromiumで日本語の表示ができるようになります。 タスクバーのアプリケーションタイトルは再起動後日本語表示ができるようになるようです

日本語入力ソフト

こちらのブログを参考にmozcをインストールします

retrotecture.jp

# sudo pkg install ja-fcitx-mozc ja-mozc-server ja-mozc-tool
# sudo pkg install zh-fcitx zh-fcitx-configtool

一度ログアウトしてログインしなおすと、fcitx-config-gtkからmozcが選択できるようになっていました。 これで日本語入力もできます

その他の設定

CPUの周波数設定

初期状態ではCPUクロックが1.5GHz固定だったので、powerdを有効化します

こちらのブログを参考にしました

www.ateamsystems.com

以下の行を/etc/rc.confに追加します

powerd_enable="YES"
powerd_flags="-a hiadaptive"

再起動後、800MHzや1501MHz4といった、1.5GHz以外の周波数も使われるようになります。

SSHの使用

こちらのブログを参考にしました。

ostechnix.com

Ubuntu等と違い、OpenSSHサーバーはFreeBSDの標準インストーラーでデフォルトでインストールされるようです。 SSHDをスタートするには、/etc/rc.conf/に以下の行を追加します

sshd_enable="YES"

再起動後は、自動でSSHDが起動し他のPCからSSH接続ができるようになります。(/etc/rc.d/sshd startで即実行もできるようです)

リモートデスクトップサーバーのインストール

こちらのブログによるとxrdpを使うと簡単なようです5

www.jeremymorgan.com

私の環境はxfceなので、/usr/local/etc/xrdp/startwm.shではexec startxfce4の行をアンコメントしました

まとめ

これでどうにかFreeBSDGUI環境で実行できるようになりました。 ここまでくると普段使っているLinuxと似た感じに使えます

インストールしたFreeBSD。日本語で表示できている。ELFファイルヘッダーのOS/ABIがFreeBSD


  1. どういうわけかNUC6CAYのWi-Fiがとても遅かったので、あとから有線接続に変更しました。
  2. X11関係のインストールは英語ドキュメントの方が詳しいようです
  3. https://chat.openai.com/share/016f3681-376a-45b8-bca2-ec07797b942f
  4. 場所は失念しましたが、どこかの掲示板で+1MHzがTurbo boost 状態をあらわすというコメントをみた記憶があります
  5. 私の環境ではXRDPでログインすると、どういうわけかPATHに/usr/sbinが含まれないので、原因を調べています。

「詳解 3次元点群処理」を読むために環境設定をした

3/5/2023: GPUが認識されていなかったので、修正のため記事の後半に追記を行いました

今回は「詳解 3次元点群処理」という書籍の内容を実行するための環境設定をしようとして大変だった(特に6章)、というゆるい記事です

「詳解 3次元点群処理」を読み始めた

先日日本に一時帰国した際に、昨年発売されて話題になった「詳解 3次元点群処理 Pythonによる基礎アルゴリズムの実装」を購入し読み始めました。
内容的には3次元の点群を解析処理するいろいろな手法を解説するというものです。 処理の多くはライブラリを活用したものですが、いくつかの処理については低レベルか(numpyレベル)からの実装の解説が行われています。

この本の特に特徴的な部分は4章(点群レジストレーション)、5章(点群からの物体認識)、6章(深層学習による3次元点群処理)、での、点群をデータベースからダウンロードして実際の処理を行ってその解説を行っている部分だと思います。しかも、これらの章で扱うPythonコードはすべてgithub公開されており、実行できる環境があれば、すべて読者が実行できるようになっています。  

このように意欲的な書籍で、扱われる内容も非常に興味深いのですが、読者の前には実行環境という壁が立ちはだかります。

まず、この本はあくまで点群処理の本であり、環境設定のような本質的でない部分についてはほとんど述べられていません。  

過去に出版された技術的な書籍でも、環境設定が固定されると、数年後には実行不可能になってしまうことも多々あったので、環境設定は各自やってね、というのはある意味合理的な判断だと思います。

自分も、この書籍にでてくる断片的な情報と、ネット上のいろんな資料を比較して、どうにかこうにか2章から6章の内容が実行できる環境を設定できたので、ここに記録として残して置こうと思います。

ただしこの内容はあくまで自分が試してみた内容というだけで、他の環境でも同様に動作することを保証するものではありませんし、この内容を参考にして環境設定を行った場合に生じるいかなる結果についてもブログの著者は責任を負いません。
むしろ、各自自身の現在の環境にあわせて追加で設定が必要であり、その設定はそれぞれ異なると考えるのが自然です。あくまで「やってみた」という程度の内容であることをご理解ください。

2章から5章までのPythonとOpen3Dのバージョン

「詳解 3次元点群処理」では何箇所か実行環境についての記述があります

まず内表紙の裏にこう書いてあります

  • 本書の執筆にあたって、以下の計算機環境を利用しています.

    Ubuntu 18.04, Python 3.8, Jupyter Notebook 6.4
    Ubuntu 20.04, Python 3.8, Jupyter Notebook 6.4

3ページ目にこうあります

次に,Open3Dをインストールします.(略)次のコマンドを実行しましょう. $ pip install open3d==0.14.1
これにより,本書執筆時点での最新バージョンであるOpen3D 0.14.1がインストールされます.

とあります。

試して見ると、あまりPythonやOpen3Dの細かいバージョンは関係なさそうだったのですが、バージョン違いで動作が違うといやなので、できるだけ合わせておきたいところです。

さて、自分が普段使っているUbuntuは22.04、PythonのバージョンはPython 3.10.6です。この環境で上記のpipコマンドを実行するとエラーがでました。

ERROR: Could not find a version that satisfies the requirement open3d==0.14.1 (from versions: 0.16.0)    
     
ERROR: No matching distribution found for open3d==0.14.1

そこで今回はPythonのバージョンをコントロールするpyenvvenvを使って、バージョンをあわせました。自分はすでにpyenvをインストールしていたのでそちらを使いましたが、インストール方法はこちらなどにあります。

3.8系で最新の3.8.13をインストールしまし、venvで3dpcpという名前の環境をつくり、0.14.1のOpen3Dをインストールします。

$ pyenv install 3.8.13  
$ pyenv local 3.8.13
$ python -m venv ./3dpcp
$ source 3dpcp/bin/activate
$ pip install open3d==0.14.1

今回はエラーもでません。 3ページの記述にしたがってOpen 3Dのバージョンを確認しておきます。

$ python -c "import open3d; print(open3d.__version__)"
0.14.1  

成功したようです。これで、書籍指定の環境でPythonスクリプトやJupyter Notebookの内容を実行できます1

6.1 章の実行環境

6章の環境については、5ページめにこうかかれています。

第6章のサンプルコードは、深層学習PyTorchおよびその拡張ライブラリであるPyTorch Geometricを用います。これらのインストール方法については、第6章を参照してください.

第6章にゆくと最初の数ページ、PyTorchを使った例が示されますがインストール方法については書かれていません。

PyTorchのホームページを見ると、推奨環境ごとにPyTorchのインストール方法は違うようです。

私の環境(CUDA11.7, PIPベースインストール)では次のコマンドでインストールできると表示されました  

$ pip3 install torch torchvision torchaudio

これで6.1深層学習の基礎のサンプルコード(pytorch_practice)は実行できるようになりました。

6.2章の実行環境 (Docker失敗編)

これは失敗の記録なので、とばして次のセクションにすすんでも問題ありません

6.2に進むと新たにPyTorch Geometricというライブラリが必要だとかかれています。

さらに環境についてはこのように書かれています

本書では安定した環境のためDockerによる環境設定を提供していますが、(略)

続いて

Dockerを用いる場合には本書添付のサンプルコードのdocker/secrtion_deep_learning2ディレクトリ以下のサンプルコードおよびDockerfileを利用してください

実際にdocker/section_deep_learningを見てみると次のようなファイルがあります。

docker_build.sh Dockerfile docker_run.sh

とくに実行のマニュアルなどは無いようです。どう使ってよいのかまったくわからないのですが、とりあえずDockerのウェブページなどを見ながらDockerの環境を設定して、実行してみました。

docker_build.shはとりあえず実行できたのですが、docker_run.shはエラーがでて実行できませんでした。

Dockerについてほぼ知らない私にはこれ以上進めることができませんでした。

6.2章の実行環境(Anaconda、とりあえず動作した編)

6.2章を見返すとこのような続きがあります

(略),執筆時点(2022/08/08)での最新のPyTorch GeometricはAnacondaを用いて容易にインストールできます.

更に、

Anacondaを用いる場合には
$ conda install pyg -c pyg
というコマンドにてインストールできます.

とあります。

この本でAnacondaの記述が出てくるのはたぶんこれが初めてなのでとまどいますが、とりあえずAnacondaの環境設定を行います。

まずこれまで使っていたpyenvの環境を抜けます

$ deactivate

自分はたまたまAnacondaの実行環境をインストールしていたのでそれを利用します。そうでなければAnacondaのインストールを行います。

次に環境を作ります。今回は3dpcp_dlという名前にします。過去にインストールしたパッケージとコンフリクトしてそうだったので、--no-default-packageを指定しました。

$ conda create --no-default-package --name 3dpcp_dl

アクティベートします

$ conda activate 3dpcp_dl

追記(3/5/2023)
Cudaのバージョンを確認します3

$ nvcc --version

自分のCudaのバージョンは11.7なので、11.7に対応したPyTorchをインストールします。

PyTorchのインストール方法ページによると、Linux + Conda + Cuda 11.7の組み合わせでPyTorchをインストールするには次のコマンドが必要だそうです。

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

先程作成した環境(3dpcp_dl)にインストールするために次のコマンドを実行します。

$ conda install -n 3dpcp_dl pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

追記(3/5/2023)終わり

必要なライブラリをインストールします

$ conda install -n 3dpcp_dl jupyter    
$ conda install -n 3dpcp_dl pyg -c pyg    
$ conda install -n 3dpcp_dl tensorboard -c conda-forge    
$ conda install -n 3dpcp_dl -c anaconda h5py

(h5pyは3/5/2023に追加)

さらに、自分の環境ではtorch_sparseでエラーがでたので、インストールしなおしました
まずPyTorchのバージョン確認

$ python -c "import torch; print(torch.__version__)"    
1.12.1  

このバージョンと手元のCudaのバージョンにあわせてtorch_sparseをインストールしなおします(参考)

あくまで私の環境(PyTorch: 1.12.1, Cuda: 11.7)の場合ですが、次のコマンドでtorch_sparseをインストールできました。

pip install torch_sparse -f https://pytorch-geometric.com/whl/torch-1.12.1+cu117.html

また、cuda関連でエラーがでていたので、cuda-toolkitの再インストールも行いました。(参考

これでとりあえず、私は6.2章のコード(modelnet10_classification.ipynb)が実行できるようになりました。

最後に

どうにかこうにか「詳解3次元点群処理」のコードを手元で実行できるようになったので記録がてらブログにしましたが、たまたま動作しているレベルで、一般的な環境とはとてもいえません。
あくまでやってみた、というレベルです。

まだ6章後半、7章の内容の確認はできていないので、もしなにか修正が必要なら内容をアップデートしようと思います。

あと、Dockerについて少し学んで、Dockerを使った環境での実行もできるようしたいなとも思っていますが、こちらはいつになるかわかりません。


  1. ところで、Jupyter Notebookについてですが、最初の環境では言及ありますが、本文では実行方法など記述がありません。5ページではipythonの実行方法が説明されていますが、ipythonについてははこのページ以降記述がありません。ちょっと不思議です。
  2. secrtionはsectionのタイポだと思われます。
  3. Cudaがインストールされていない場合は、まずCudaのインストールページを参照してインストールします。PyTorchは今の所Cuda-11.7までサポートしているようなので、インストールするのは11.6か11.7が良いと思います。自分の環境(Ubuntu 22.04| + GTX2080Ti)では、deb(network)でCuda-11.7がインストールができました。(deb(local)では失敗)。