モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

WSL環境のVSCodeでTensorboard使えるようにしようとしてGLIBCXX_3.4.29がないといわれるエラー

WSL環境で動かしてるVSCodeでTensorboardを起動できるようにしようとすると、VSCodeが自動で出してくるインストールの指定

$ conda install -c conda-forge tensorboard

を実行したせいだと思うのだが、sklearn関係のところで「GLIBCXX_3.4.29」が入ってないというエラーがでて動かなくなるという問題が起きた。

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/stealth/anaconda3/envs/mmvcwsl/lib/python3.8/site-packages/sklearn/metrics/_pairwise_distances_reduction.cpython-38-x86_64-linux-gnu.so)


そこでまず該当の「libstdc++.so.6」がどのバージョンまでの GLIBCXX に対応しているかを確認してみた。

$ strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
…略
GLIBCXX_3.4.27
GLIBCXX_3.4.28

ということで「3.4.29」は対応していないからエラーになっていることがわかった。


ここ見るとこういう場合、conda-forgeから新しいめの「gxx_linux-64」をインストールすると良い模様。

python - Install GLIBCXX_3.4.29 in anaconda - Stack Overflow https://stackoverflow.com/questions/68205760/install-glibcxx-3-4-29-in-anaconda

$ conda install -c conda-forge gxx_linux-64==11.1.0

しかしこれでもダメ。
最新のが必要なのかと思い探してみると 11.2.0 があったのでこれを入れてみる。

https://anaconda.org/anaconda/gxx_linux-64

$ conda install -c conda-forge gxx_linux-64==11.2.0

がやっぱダメ。


というか strings 見ると変わってないから、そもそも conda で入る場所が /lib/... 以下じゃないので、見るところが間違ってるというのが根本的問題に見える。
ちなみに下記ページでは自分で手で /usr/lib64/ 以下にファイルをコピーしていた。

解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题 - IT笔录 https://itbilu.com/linux/management/NymXRUieg.html


そこでanacondaの環境が保存されてるディレクトリ以下の ~/anaconda3/envs/mmvcwsl/lib/libstdc++.so.6 を確認してみたところ、

$ strings lib/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
…略
GLIBCXX_3.4.28
GLIBCXX_3.4.29

と、ちゃんと3.4.29 が入っていることが確認できた。
なのでやはり、conda環境で参照してるライブラリのパスが合ってないのが問題な気がした。


そこでLD_LIBRARY_PATHも含めてググってみると、下記の内容が見つかった。
やはりLD_LIBRARY_PATHに anacondaのlibディレクトリを指定して解決していた。

python - ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found - Stack Overflow https://stackoverflow.com/questions/49875588/importerror-lib64-libstdc-so-6-version-cxxabi-1-3-9-not-found
python - Anaconda ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found - Stack Overflow https://stackoverflow.com/questions/58424974/anaconda-importerror-usr-lib64-libstdc-so-6-version-glibcxx-3-4-21-not-fo

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path/to/conda/env/lib

ということで自分の場合は

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/anaconda3/envs/mmvcwsl/lib

とすることで解決した。

でもこれだとcondaで環境切り替えたとき、一緒に LD_LIBRARY_PATH も切り替えないといけないはずで、それが一発でできなくなるのはなんかおかしいように思う。
思うが、これ以上追及するのはさすがにヤックシェービングすぎるので、環境切り替えたりなんだりするシェルスクリプトにLD_LIBRARY_PATHの指定も入れて解決したことにした。


なにかもっと根本的な解決法があれば教えてください。

Windows11のタスクマネージャーのGPUにCUDAの選択肢がない

pytorchでごりごりとディープラーニングの学習を回しているとき、GPUの負荷をタスクマネージャーから確認できるのですが、CUDAを選択することで学習で利用している部分だけの負荷を確認することができます。

下図のような感じに表示されるのですが、GPUの選択肢に「Cuda」が出てこない環境があり、なんでだろう??となっていました。

タスクマネージャーのCUDAのメニュー

そんな話をtwitterで書いてたら、@KojiSaitoさんからこのエントリを教えてもらいました。


Cuda not in Task Manager
https://answers.microsoft.com/en-us/windows/forum/all/cuda-not-in-task-manager/a65eed92-828f-4d92-b9c9-cb2666bdd87f

Settings -> System -> Display -> Graphics settings (down the bottom of page) -> Hardware-accelerated GPU scheduling -> Switch to "Off"


日本語の場合だと、

システム > ディスプレイ > グラフィック > 既定のグラフィック設定
ハードウェア アクセラレータによる GPU スケジューリング
を「オフ」にする

と良いようです。
これは絶対にわからんわ。

SourcetreeでOAuth認証がうまくできない

Sourcetreeで、それまで使っていたgitを、Windows用gitからSourcetree同梱のgitに変更したところ、GithubのOAuthの認証が通らなくなりました。

そういう場合

  • オプションの認証設定からアカウント設定作り直す
  • リポジトリのorigの設定を作り直す

というのが有効とのことだったのですが、どちらを試してもダメでした。


認証設定で「OAuthトークンを再読み込み」をすると、ブラウザでlocalhostが開くのですが、そこが白画面になってしまうという状況でした。

community.atlassian.com
community.atlassian.com

ここでの回答で、ブラウザを標準のEdgeにするとかプロクシ設定を見直すとかがありましたがやはりダメ。

ただ、白画面なのに認証は成功になっていて、そこもおかしい感じでした。


そこで、credentialあたりのWindowsのgitの設定とSourcetreeのgitの設定とで違いがないか確認してみました。
すると「credential.helper」の指定が違っていました。

cmd(コマンドプロンプト)上で

>git config --system -l
credential.helper=manager-core

Sourcetreeのターミナル上で

$ git config --system -l
credential.helper=


なのでSourcetreeのgitのcredential.helperの設定をWindowsのgitの設定に合わせてやりました。

$ git config --global credential.helper manager-core


これで無事に動くようになりました。

NSEG勉強会 #106

コロナで中断していたNSEG勉強会が2年ぶりくらいに開催されたので、最近触っているオープンソースのリアルタイムボイスチェンジャー、MMVCとそのエンジン部分VITSについて紹介てきました。

NSEG + JAWS-UG 長野支部 合同勉強会 - connpass

speakerdeck.com

やっぱり勉強会みたいなのはリモートで聞くだけではあんまり意味なくて、その場にいってコミュニケーション込みで成り立つものだな、とあらためて思った次第です。

chrome上のWebアプリでCtrl+nを使いたい

Scrapboxがいいと聞いて試しに使っているのですが、確かになかなか良い感じです。

で編集に簡易Emacs bindingが使えるらしく設定してみたのですが、Ctrl+pすると印刷画面が出てきてしまい悲しくなりました。
調べてみると「shortkeys」というエクステンションを入れると解決するらしく、入れてみていくつか設定してみました。

chrome.google.com

すると、Ctrl+pやCtrl+hは問題ないのですが、Ctrl+nだけはどうしても新しくウィンドウが開いてしまうのです。

これ何とかできないの??と思って検索してみるとどうも、Ctrl+N/T/Wだけは設定変更できないようになってるとのことでした。

javascript - Any way to override Ctrl+N to open a new window in Chrome? - Stack Overflow


これはダメだ… と思ったんですが、実は回避策が。

kazhat.seesaa.net

Chromeを「アプリケーションモード」で動かしている場合だと、ショートカットは全部無効にされるんだそうです。

というわけでScrapboxだけアプリケーションモード用のアイコンを作成してそちら経由で起動することで対応しました。

Windows11で共有ファイルサーバが見れない

Windows11にしてから結構何ヶ月か経ったのに、今頃になって家のファイルサーバ(NAS)が見えないことに気が付きました。

普通にpingとか通るのでファイル共有だけが通らない状況。
ぐぐってみると一番ありそうなSMBがオフになってるのが出てきました。

docs.microsoft.com

早速確認してみるとやはりSMB1.0がオフになっていました

前は見えてたからたぶんWindows11にした時に勝手にSMB1.0オフにされたんだと思う。
これってセキュリティリスクがあるからなのだろうけど、やっぱ勝手にするのはやめて欲しいなあ、と思いました。

ColabやJupyterのノートをgitで管理するための設定

ColabやJupyterのノートをgitで管理しようとすると、1行のJSONになっているためgitとは相性が悪いです。
また、出力部分はgitで管理したくない場合が多いと思います。(Colabの場合は出力を保存しない設定があるのでそれを使ってもよい)

そこで下記エントリにしたがい、jqを使ってgitのfilter設定をすると、JSONを適宜改行して、出力部分は削除してくれるため、gitでの管理に向いた形にしてくれます。

ni66ling.hatenadiary.jp

で、そこまではよかったのですが、Windows上のSourcetreeで使っていると時々、修正を行っていなくても

\ No newline at end of file

というエラーがでてしまって困っていました。
これはファイルの最終行が改行で終わっていないことで出るエラーなのですが、jqが処理した後の出力の最終行に改行がないことで出ています。

でどうしたものかと思ったのですが、jqでこれ対策用の設定がありました。

jq Manual (development version)

--binary / -b:
Windows users using WSL, MSYS2, or Cygwin, should use this option when using a native jq.exe, otherwise jq will turn newlines (LFs) into carriage-return-then-newline (CRLF).

ということで「binary」オプションをつけてやるとちゃんと最後に改行つけて吐き出してくれるようでした。

ので上記エントリの「clean=jq …」のところの呼び出しに、下記のように「-b」つけてやることで解決しました。

  clean = jq -b --indent 2 --monochrome-output '. + if .metadata.git.suppress_outputs | not then { cells: [.cells[] | . + if .cell_type == \"code\" then { outputs: [],  execution_count: null } else {} end ] } else {} end'

Windowsのpython3.10にpythonnetを入れようとしてエラーがでる

Windowsのpython3.10にpipでpythonnetをいれようとしたらエラーがでてインストール出来ませんでした。

色々と調べて古いバージョンのBuild Toolsとか入れたりしたんですがダメ。

さらに調べると、実はpythonnetは公式では3.8までしか対応しておらず、3.9用もそれ用のwhlファイルをダウンロードしてきて入れないと入らないのだとのこと。

python - How to fix error during pythonnet installation - Stack Overflow
https://stackoverflow.com/questions/67418533/how-to-fix-error-during-pythonnet-installation

でも、3.9 のanacondaは対応しているようで、anacondaの環境下では pip でさっくり入りました。
で一度anacondaで入れると、このwhlファイルがダウンロードされてきてキャッシュされているため、Windowspythonを3.9にしてやると、そちらでもそのままpipで入れることができました。

ちょっと不思議な気もしますがそういうもんなんですねえ。

numpyのバージョンが合わない問題

とあるツールを動かそうとしたらこんなエラーが出ました。

RuntimeError: module compiled against API version 0xf but this version of numpy is 0xe

どうもnumpyのバージョンが想定されているものと合っていないらしかった。
こういう場合、pipでnumpyのバージョンを上げれば解決するらしいのだが

$ pip install numpy --upgrade

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
numba 0.55.1 requires numpy<1.22,>=1.18, but you have numpy 1.22.3 which is incompatible.

と言われてしまい解決せず。

ただ、下記エントリに同様の件が上がっていました。

pipの厳格な依存関係チェックにハマってしまった時の解決方法備忘録メモ - Qiita https://qiita.com/y-vectorfield/items/effed435c42d8bad42ac

numbaのバージョンを上げればよい模様

pip install numba --upgrade

これで解決できました。
ありがたい。

…と思ったらそんなことなかったのです。

numbaはすでにupgradeされており、pip installしたらnumpyのバージョンを1.21に下げてくれました。
というわけで結局元の問題は解決せず…

どうやらnumbaはまだnumpyは1.21じゃないと動かないため、ここは必須要件のようでした。
さてさて困ったね。

どうもmatplotlibがこのエラー吐いているため確認すると matplotlib-3.1.0 でした。

$ pip show matplotlib
Name: matplotlib
Version: 3.1.0

ほかの環境では matplotlib-3.1.1 だったので、もうちょいバージョンを上げてみることにする。

$ pip install matplotlib==3.1.2

これで解決できました!

うーん、しかしいったいどういうことなんだろう…
anacondaの3.1.0のイメージがコンパイル時のnumpyバージョンが高かったってことなんだろうか?

印刷スプーラーの脆弱性(PrintNightmare)対策パッチ(KB5005565)から始まる悪夢

あるWindowsサーバの再起動をしたところ、共有プリンタが使えなくなるという障害が発生したということで、調査対応しました。


Windowsサーバにプリンタが接続されており、そのサーバ上からはテストプリントなど通るものの、既に設定されていた共有プリンタからのアクセスはできなくなっていました。

ネットワークプリンタにアクセスしようとすると

0x0000011bエラー

が発生してアクセスできないことがわかりました。


これで調べてみると、去年の秋2021年9月頃に出た印刷スプーラーの脆弱性(PrintNightmare)という脆弱性に対する対策パッチKB5005565が当たると、共有プリンタが使えなくなるという問題が起きていたことがわかりました。


servercan.net


Windowsセキュリティ更新プログラム(2021年9月14日公開)のKB5005565、(2021年10月12日公開)のKB500670などを適用したら、共有プリンターに対して印刷出来なくなりました
https://faq2.epson.jp/web/Detail.aspx?id=52608


このサーバOSはWindows Server 2012だったのですが、結構長くWindows Updateが掛かっていなかったものが、再起動のタイミングでWindows Updateがかかっていたことがわかりました。


それでWindows Updateで当たったパッチを調べると

  • 5009624
  • 5008870
  • 5008868
  • 5008263
  • 5007247

の5件が当たっていました。


ここでは問題の5005565は出てきていなかったのですが、調べていくとどうも5007247が関係しているっぽい?という感じだったため、消して試してみることにしました。
が、パッチを消すと
5007247 -> 5006714 -> 5005613 -> 5005076
という感じに対応する古いパッチが順に当たってしまう… という状況になりました。


とりあえずそこまで全部消してみたのですがエラーの起きる状況は変わらずでした。
また、5009624は色々と問題が出ているパッチのようでした。

Windows 8.1 および Windows Server 2012 R2 | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/release-health/status-windows-8.1-and-windows-server-2012-r2


そのため一旦この時に入った上記パッチを全部削除することで試してみることにしました。


すると…

無事にどのPCからも共有プリンタへアクセスできるようになりました!!

サーバPCが古いこともあって、パッチを一つ一つ外しては動くようになっているか試すのにもんのすごい時間がかかって、この件でまるまる2日近くも消費してしまいました。もう勘弁して… という感じです。