Category: Python

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のみ上手く作用したので、ここでも載せておく。まずは提案されている生コードを下記に示す。…

DockerDesptopから画面を取るまで

今回はDocker Desktop for Linuxから画面を取るまでの試行錯誤、およびシンプルなdockerからの変更点などを解説します。4/15から4/24までの格闘日誌になります。ちょうど職場でのプレッシャが起因した休職に入ったのですが、今もすごく頭が痛いです。治るのかなこれ? 普通のDockerから画面を取る場合 普通のdockerから画面を取る場合は、下記3つが必要になります。 まずは1つ目、ソケットファイルの共有から解説します。まずはホストにあるソケットファイルの実体ですが、こちらは簡単に見つけることができます。先頭がd(directory)ではなく、s(socket)になっていることが証拠です。 2つめの$DISPLAY変数ですが、こちらはホストでは下記のようになっています。 $DISPLAY変数の構成は(ホスト名):(ディスプレイ番号).(スクリーン番号)で表現されます。今回はローカルホストであるため、ホスト名は省略されており、理由は良くわかりませんがスクリーン番号も省略されています。コンテナから画面を取る際も、localhostの画面へ表示を行いたいので$DISPLAY変数は同じで良いということですね。最後の画面表示の許可ですが、通常Xサーバへは決められたユーザしかログインできないのでそれを解除する作業になります。単純にxhost+と端末で入力するだけなので、非常に簡単な作業ではあります。ここまでの作業を自動でやってくれるプログラムはここで公開してあります。 DockerDesktopではうまく行かない 表題の通り、上記の手法をDockerDesktopで再現しようとしてみてもうまくいきません。エラーメッセージは下記の通りです。 このエラーは$DISPLAYで指定されている:0の画面へアクセスしようとしたら開けなかったというメッセージになり、通常はxhost + を行わなかった時に発生します。念の為xhost + を再度やってみても同じ回答が来るので、今回は違う原因で発生していると推測できます。幸いなことに、前回DockerDesktopは通常版とは違い、VM上で動作している説が発見できているので、今回は「別マシンから自マシン上へ画面を転送する」という技術で解決する必要がありそうです。 DockerDesktopからホストへのSSHを可能にする さて、情報の転送といえばSSHですね。今まで横着してSSH関連についてあまり勉強してこなかったのですが、今回はOpenSSH入門(河本安武さん著)を使ってしっかり活用して行こうと思います。まず、コンテナ側にあるアプリがssh-client, ローカルマシン側がssh-serverになるため、コンテナにopenssh-clientが入っているか確認しました。ここはデフォルトで入っていたので特筆する作業は無いです。一方でローカルホストの方にopenssh-serverが必要なのに入れていなくてかなり長い間格闘しました。ChatGPT先生の介抱もあってなんとか気づけたのですが、皆様もこのような初歩的なミスに引っかからないようにしましょう。ローカルホストへのssh-serverのインストールは下記の通りになります。 sudo apt install openssh-server ホスト上のSSH開通実験 まずはsshが正しく可能かどうか確認しましょう。私の場合、最初にこの開通実験を行っていなかったため、問題の切り分けに時間がかかりました。反省を兼ねてここで当たり前の確認作業を記述します。このセクションでやっておくべきことは「ホスト端末」→「ホスト端末」へのSSHが成功するかどうかの確認になります。これ自体は下記の方法で実行できます。 ssh username@localhost ホスト→コンテナへのSSH ホスト→ホストのSSHが成功することが確認できたあとは、ホスト→コンテナのSSHを試してみましょう。ちなみに私はここで躓きました。まずはエラーメッセージから。 $ssh…

久しぶりにPythonに触らなければしぬと思った

2020年8月某日こんにちは。最近仕事にばっかり注力していたRockinWoolです。仕事辞めたいといつも思っているのに、それが人生の時間で一番大きな割合を占めているのがしょっちゅう許せないですよね。そういうわけで、前回の投稿から現在までの間で色々勉強のスタイルを模索して、結果としては出社前に一時間程度勉強してから出勤するのがアタマが冴えてベストという答えになりました。これを習慣付けて、パワーパーソンになるべく修練を積んでいこうと思ってます。 さて、今回は前回までの’Pythonで学ぶネットワーク’ではなく、最近にわかに話題らしいGinzaについてです。「まえがきで散々勉強勉強言って置きながら全然アンタの専門ちゃうやんけ」って言われそうですが、やりたかったんだもん。仕方ない。 Ginzaについては次のサイトに詳しく書いてあります。自然言語処理ライブラリGiNZAをインストールして簡単に動かすまでの手順 そもそも自分がGinzaについて知ったのは完全に偶然です。先週、自分の部署に初めてとなる後輩新入社員がやってきたので、最近興味あることを聞いてみたらIBMのWatsonって答えたんですよね(本当はこの回答は3番目くらいに飛び出した内容で、ドローンとかそういうやつのほうが興味ありそうでしたけど)それでWatsonに興味を持ったんですけど、WatosonはIBMの登録がいるとかなんとかで、なんか面倒だなあって思ってしまったんですよね。それで、来たようなやつで自由に使えそうなやつ無いかなあと思っていたらGinzaにたどり着いたってわけなんです。GinzaはMITライセンスらしいので安全ですね!(ライセンスについては全然知らない) それでは今回も実況しながら進めて行こうと思います。まず、Ginzaはpipしか対応していないっぽいので(conda install Ginzaってやったけどダメだった)新たにAnacondaの環境を作成することにします。詳しいことはこのページでも見れば良いと思います。環境名はGinzaを実行する用としてGinpyにしました。 一応、環境一覧をinfo -eで確認してから、Ginpyに移動します。 ではGinpyにGiNZAを入れていこうと思います。コマンドは以下の通りにしました。 とりあえず、これでGiNZA自体を入手することは成功したので、所有欲の半分は満たされました。次は支配欲を満たすために実際に使っていくことにします。 まずは形態素解析から。形態素解析は説明するよりも見るほうが早いと思うので説明は省きますが、高校時代にこれがあればもうちょっと国語に興味が持てたかなあと思います(多分そんなことは無い)適当な作業ディレクトリに移動して以下の流れでファイルを作って、コードを書いてみます。\ すると、上手く動きはするのですが、警告が! ぱっと見、バージョンが新しいから危ないよ。コマンドを打って調整してね!って書いてありそう(適当)なので、コマンドを打ってみる…が全然ダメだし、もう普通に動いているから問題ないやってことで進めていきます(諦め) 先程のGintes1.pyを実行すると以下のような表示が出力されます。 ここで一言、すげえと出てしまいました。ワーカホリックとかも辞書登録されているのでしょうか?かなり正確に結果が出ていることがわかります。これらの関係は画面出力でより簡単に理解できるみたいです。 あと個人的に気になったのは2つの文章を見比べて類似度とやらを出してくれる機能。具体的に何をやっているのかは専門家ではないので知らなくていいかなあ。 上を実行すると結果は0.46384519507135974って表示されます。半分くらい似ている・・・らしいけど、なにが半分似ているって根拠なんだろう?文章の中の各言葉間の類似度を計算することもできるらしいです。 ここで問題発生。最初に作ったAnacondaの環境にはpandasが入ってなかったようなので、急遽conda install pandasで追加しました。最終的にはが出力されて単語ごとの類似度もわかります。すごいですねえ。