tropicbirdのブログ

データサイエンスとかに関するメモ

Jupyterのカーネルに設定されたPythonのバージョンを確認する方法

はじめに

Jupyter上で複数の仮想環境を使うために、以下のサイト等を参考にして複数のバージョンのPythonを pyenvで作成した。
Jupyterで複数カーネルを簡単に選択するための設定 - Qiita
Python:venv + pyenvでの環境構築 - 無粋な日々に
そして、Jupyter上で各カーネルPythonのバージョンを

!python --version

で確認したら、ホストのPythonのバージョンが表示されて少し混乱したので、その時の備忘録です。

<前提条件>
ホスト環境:Python 3.8.6
仮想環境:Python 3.7.6

詳細と原因

カーネルを仮想環境にして、Jupyter上で

!python --version

とすると、

Python 3.8.6

が出力されたので、カーネルの設定に失敗したかと思った。


少し冷静になって、

import sys
print(sys.executable)

とすると、

'/home/username/.pyenv/versions/3.7.6/bin/python3.7'

が出力されたので、Jupyter上はPython3.7.6になっていることが確認できた。

ポイント

Jupyter上で

!python --version

としても、ホストのPythonのバージョンが表示される。Jupyterのカーネルで設定した環境のPythonのバージョンを確認したいときは、

import sys
print(sys.executable)

を使う。

GPUをWSL2とDockerで使えるようにする方法

はじめに

Dockerの初学者です。Dockerを使い始めるにあたり、WSL2とDockerでGPUを使えるようするために環境の構築を行ったのですが、エラーが連発したので、その記録と解決方法を紹介します。

WSL2上でdockerを使ってGPUを使用する方法は、NVIDIA公式のCUDA on WSL :: CUDA Toolkit Documentationに詳しく説明されています。日本語だとついにWSL2+docker+GPUを動かせるようになったらしいので試してみる - Qiitaが分かりやすいです。私のPCの環境はWindows10 Homeです。

エラー内容①

Docker Desktop for Windowsをインストールして、WSL2と連携したはずなのにWSL2上で以下のコマンドを入力してもDockerが反応しなかった。

$ sudo service docker stop
$ sudo service docker start
エラー内容②

WSL2上でGPUが認識されているか確認するためにNVIDIA公式に記載の以下のコードを入力しても、

$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

以下のようなエラーが発生した。

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
原因(おそらく)

NVIDIA公式の方法に従って作業をする前に、Docker Desktop for Windowsを先にPCにインストールしていたため。

解決方法

1. PCにDocker Desktop for Windowsがインストール済みの場合は、「アプリと機能」からDocker Desktopをアンインストールする。


2.NVIDIA公式の方法に従って作業する。この時、以下のコードをところで、「既にdockerがマシンに入っているからトラブル起きる可能性あるよ(意訳)」という警告文が発生し、それでも進めようとすると、「WSL2環境があるときにはDocker Desktop for Windowsを使いましょう。(意訳)」と警告文が出るけど無視して進める。

$ curl https://get.docker.com | sh


3.引き続きNVIDIA公式の方法に従って作業し、

$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

の箇所で、以下のエラーが発生した場合は、

docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.
ERRO[0000] error waiting for container: context canceled

以下のようにディレクトを作成してマウントする。

$ sudo mkdir /sys/fs/cgroup/systemd
$ sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

すると、

$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

が正常に動作します。以上です。

【解決方法の参考サイト】
cuda - GPU/Docker not working Ubuntu 20.04 in the WSL 2 of Windows - Ask Ubuntu
https://github.com/docker/for-linux/issues/219#issuecomment-375160449

Djangoで作ったWebアプリをHerokuでデプロイするとmediaが使えなかった。

課題

Djangoで作ったWebアプリをHerokuで公開したら、DEBUG = True の時はmediaからファイルがダウンロードができたけど、本番環境のDEBUG = False にするとmediaからファイルがダウンロードができなくなった。

原因

PaaS(Herokuなど)ではDjangoのmediaは使えない(※使うためには工夫が必要)。
(参照サイト:Djangoで静的ファイルとうまくやる

解決策

mediaを使う代わりにドロップボックスにファイルをアップロードして共有URLをHTMLにハイパーリンクとして埋め込む。ちなみに、ドロップボックスの共有URLの末尾をdl=0からdl=1に変更すると、強制ダウンロードにすることができる。

<a href="https://www.dropbox.com/<共有ファイル毎のURL>?dl=1">samplefile.pdf</a>

ポイント

対象のWebアプリでのmediaの用途が、adminが上げたファイルを利用者がダウンロードするためにmediaを使っていただけなので、上記の解決策が楽だった。

【個人メモ】PyCharmでConda環境のDjangoを使用する方法(結論:解決できず。。)

PyCharmのConda環境でDjangoのプロジェクトを作成(下図)しようとしましたが、
f:id:tropicbird:20200916103027p:plain



エラーが発生(以下は一例)してうまくできませんでした。

Failed to get real commands on module "djangoProject": python process died with code 1: Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pycharm\_jb_manage_tasks_provider.py", line 25, in <module>
    django.setup()
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 76, in __getattr__
    self._setup(name)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 63, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\site-packages\django\conf\__init__.py", line 142, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Users\XXX\anaconda3\envs\djangoProject\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\XXX\Dropbox\PycharmProjects\djangoProject\djangoProject\settings.py", line 57, in <module>
    'DIRS': [BASE_DIR / 'templates']
TypeError: unsupported operand type(s) for /: 'str' and 'str'

色々とエラーの解決を試みましたが、私の力では解決できませんでした。なので、以下の動画を参考におとなしくVirtualenv環境でDjangoのプロジェクトを作成することにしました。
www.youtube.com

Git Bashでcondaを有効にする方法

1. Git Bash上で以下のコマンドを入力すると、Git Bash上でcondaコマンドが使えるようになります。

$ . /c/users/XXX/anaconda3/etc/profile.d/conda.sh

2. 上記を毎回入力するのが面倒な場合は、以下のコマンドを入力すると、Git Bash起動後すぐにcondaコマンドが使えるようになります。

$ echo ". /c/users/XXX/anaconda3/etc/profile.d/conda.sh" >> ~/.profile

3. 最後に、以下のコマンドを入力してcondaの対象とする環境を指定します

$ conda activate <環境名>

以下の図は問題なく1.~3.の入力ができた場合の例です。(※以下の例のAnacondaの環境名はpythonProjectです。)

f:id:tropicbird:20200915145214p:plain

PyCharmでJupyterを起動する際のエラー(Notebook kernel doesn't match project interpreter)の解決方法

エラーの内容

Anacondaの環境下でPyCharmを使用する場合に、jupyter notebookのファイル(.ipynb)を作成してコードを実行すると、「Notebook kernel doesn't match project interpreter」というエラーメッセージが出てきた。エラーメッセージに関わらず、PyCharm上で起動しているJupyterは正常に動いている気もしましたが、解決方法を見つけたので記します。

解決方法

1) Anacondaのプロンプトを開く。
f:id:tropicbird:20200914225359j:plain

2) 以下のコードを入力する。myenvの箇所はプロジェクト環境名に置き換えてください。

conda activate myenv
python -m ipykernel install --user --name myenv --display-name "Python (myenv)

例えば、プロジェクト環境名がpythonProjectなら、以下の通りです。(※オレンジの塗りつぶし箇所は個人情報)

f:id:tropicbird:20200914231505j:plain

3) 最後にPyCharmを再起動すれば、PyCharm上でjupyter notebookのファイル(.ipynb)を実行してもエラーが出ないことが確認できます。もし「Notebook kernel doesn't match project kernel」という新しいエラーメッセージが出た場合は、エラーメッセージと同時に表示される「Update notebook kernel」をクリックすれば解決します。