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

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

OpenAIのwhisperがすごい

このひと月ぐらいはStableDiffusionのことで持ち切りだった気がするが、こないだOpenAIが発表したwhisperも相当すごい。

openai.com

github.com

whisperはすごい高性能な音声認識とついでに英語翻訳が可能なツールです。

音声認識できるのは英語や日本語だけじゃなくてほぼすべての言語と言ってよいくらい。そして全部の言語から英語へ翻訳可能なのです。
しかもMITライセンスで使えて、学習済みデータも提供されています。この学習されたデータがなんと68万時間(77年!)というとてつもない時間のデータとなっています。
そして認識精度もすごくて、ノイズが酷くてもものすごい早口でもだいぶ正確に聞き取れています。

そして、プログラムに組み込むのもものすごく簡単で、下記にデモのページを作ってみたのですが、たったこれだけのコードで音声認識と英語への翻訳が可能になってしまいます。

github.com

これ、音声認識とか自動翻訳とか研究でされてる方はもう相当打ちのめされてるのでは…

iZotope RX9で音が出ない場合ASIOを選択する

最近ディープラーニングによるボイスチェンジのことを色々やっていて、そこで学習用データのノイズを削減するためにiZotope RX9を導入しました。


で一番基本的なファイルの音を聞くことができない、というところではまりました。
音を聞こうとするとグラスをキンキン鳴らしたみたいな音しかしないのです。


support.minet.jp

RX7の話ですが、公式にこのような話が出ていて、Driver typeの指定が正しくないとだめっぽいのですが、これはMacの例だったのでそのまま「CoreAudio」は使えず。


でもこれはWindowsの場合「ASIO」にあたると考えられるためASIOを選択しました。
Windowsでは必ずしもASIOドライバが入っているわけではないのですが、自分の場合は「Realtek ASIO」が入っていたので、とりあえずこれを選択すると、通常のイヤホンマイクジャック経由では音を聞くことができました。
が、なぜかこれで聞くとプチノイズが非常に高い頻度で発生する状況になりました。


ヘッドセットにLogicoolのG433を使っており、これはUSB接続もできるのですけどもASIOは対応していませんでした。
そこで今度はASIO4ALLを導入してみました。
これはASIO対応していないものもASIOに対応してくれる「かもしれない」ツールです。
最初最新の2.15を入れたのですが、これだと設定ツールが使えないためうまく動かず、2.14を入れて無事にG433のUSB接続でASIOに対応できるようになりました。


その上で再度RX9の

Edit->Preferences->Audio から

Driver type->ASIO
Device->ASIO4ALL v2

を選択してやることで利用できるようになしました。

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にしてから結構何ヶ月か経ったのに、今頃になって家のファイルサーバが見えないことに気が付きました。

普通に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で入れることができました。

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