ヴェズルフェルニルの研究ノート

座右の銘「ただ一人犀の角のように歩め」的な研究活動ノート

【Windows】Visual Studio CodeでのPython仮想環境の設定

前記事に公式版Pythonによる仮想環境の構築方法について書いたが、小生はPythonプログラムの開発にはVisual Studio Codeを利用しており、コーディングもデバッグもほとんどVSCodeを使って行っている(多く人が同じ環境を使っているようで、ググるとたくさんのページがヒットする)。

blog.ketus-ix.work

MacUbuntuではすでにこの環境は構築済みで常用しているが、Windows上にPython開発環境を構築するにあたって、このPython + VSCode環境の構築方法を備忘録として書いておくことにする。

Visual Studio Codeのインストール

ChocolateyによるVSCodeのインストールは、管理者権限で開いたPowerShellから下のコマンドを実行することで行える(Chocolateyについてはこちらの記事を参照のこと)。

> choco install -y vscode

Visual Studio CodeでのPython仮想環境の設定

拡張機能 Python のインストール

VSCodePythonプログラムの開発を行う場合、拡張機能 "Python" を利用する。

メニュー[Manage (管理)](左下の歯車マーク) > [Extensions (拡張機能)] で開いたバネルの検索ボックスに "python" と入力すると、拡張機能 "Python" が表示されるので、それを選んで、[Install (インストール)]を実行するとインストールできる。

なお、Chocolateyを利用してVSCode拡張機能 "Python" をインストールすることもできる。

> choco install -y vscode-python

VSCodeのUIを日本語表示にしたい場合は、先に拡張機能 "Japanese Language Pack for Visual Studio Code" をインストールしておく。

仮想環境のPythonインタープリタ設定

Python仮想環境を作成したプロジェクトディレクトリをVSCodeから開く(仮想環境の作成方法については前記事を参照のこと)。

コマンドパレット(ショートカットキーShift+Ctrl+P)から "Python: Select Interpreter" を選ぶ。

すると、利用可能なPythonインタープリタの一覧が表示されるので、その中から "Python x.xx.x ('.venv': venv) .\.venv\Scripts\python.exe" を選択する。

この状態で拡張子 .py のファイルを作成すると、Pythonプログラムのソースファイルとして認識され、ステータスバー上に選択した "Python x.xx.x ('.venv': venv)" が表示されているのが確認できる。

上記の操作設定によって仮想環境がすでに起動しており、作成したPythonソースファイルをランすると、それは選択済みのPython仮想環境によって実行される。

【参照サイト】

qiita.com

【Windows】公式版Pythonによる仮想環境の構築

前記事にWindowsのパッケージマネージャであるChocolateyの使用方法について書いたが、Windows関連の最初の記事としてこの内容を選んだのは訳がある。

blog.ketus-ix.work

Windows関連の記事でツールなどのインストール方法の説明をできるだけ簡略化したかったからだ。Chocolateyを利用してツールなどをインストールする場合、インストール手順のコマンドだけを書けば良い。

小生のWindows環境では、Chocolateyでインストール可能ものはすべてこれを使って導入しており、Chocolateyでインストールできないものだけ追加的な方法を使うようにしている。

Windows環境を使い始めた第一の目的はPythonによるAI開発環境を構築することなので、Windows周りではしばらくPython関連の記事を書いていくことになるだろう。その最初の記事として、公式版Pythonによる仮想環境の構築方法について書くことにする。

以下の内容は、Chocolateyがインストール済みという前提で書いていく。

公式版Pythonのインストール

Chocolateyによる公式版Pythonのインストールは、管理者権限で開いたPowerShellから下のコマンドを実行することによって行える。

> choco install -y python

このコマンドによってインストールされるのは、Pythonの公式サイトで配布されている最新バージョン(本記事執筆時点では、バージョン3.12.1)だ。

最新版より古いバージョンは以下のコマンドによってインストールできる。

> choco install -y python311
> choco install -y python310
> choco install -y python39
> choco install -y python38
> choco install -y python37
> choco install -y python36
> choco install -y python35

上記のコマンドを使うと、Pythonの実行ファイル群はフォルダC:\Python<Version>Python 3.12ならC:\Python312)にインストールされる。

また、同時に以下の2つのパスがシステム環境変数Pathに追加される。

  • C:\Python312\Scripts\
  • C:\Python312\

ユーザー環境変数Pathの確認

公式版Pythonのインストールが済んだら、PowerShell(ターミナル)を開いて、下のコマンドを実行できるか確認しておく。

> python --version
Python 3.12.1

なお、複数のバージョンの公式版Pythonをインストールした場合、"python" の代わりに "python3.12" のようなバージョン番号付きのコマンドを使わなければいけなくなる。 コマンド "python" でアクセスできるのは最後にインストールしたバージョンのPythonだけになる(後からインストールしたものが環境変数Pathの検索順の上位となるため)。

公式版Pythonによる仮想環境の構築

公式版Pythonには "venv" というコマンドが含まれており、これを利用することで仮想環境を構築できる。

仮想環境の作成

任意のプロジェクト用ディレクトを作成して、その中で下記のコマンドを実行すると、新しいPython仮想環境を作成できる。

> mkdir PROJECT_DIR
> cd PROJECT_DIR
> python -m venv .venv

複数のバージョンの公式版Pythonをインストールしている場合は、下のようなコマンドによって、Pythonのバージョンを指定して仮想環境を作成することができる。

> python3.10 -m venv .venv

仮想環境の起動と終了

PowerShellを使う場合

PowerShell(ターミナル)から仮想環境を使う場合は、毎回最初に下のコマンドを実行しておく必要がある。

> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

仮想環境の起動

> cd PROJECT_DIR
> .venv\Scripts\activate

仮想環境の終了

(.venv) > deactivate

コマンドプロンプトを使う場合

仮想環境の起動

> cd PROJECT_DIR
> .venv\Scripts\activate

仮想環境の終了

(.venv) > deactivate

仮想環境でのPythonパッケージの管理

作成したPython仮想環境には、"pip" というコマンドが含まれている。

pipPythonの公式パッケージ配布サイトであるPyPiからパッケージを参照するためのコマンドであり、このコマンドを使って各種のパッケージを入手することがきる。

pipコマンドの更新

(.venv) > python -m pip install --upgrade pip

パッケージのインストール

(.venv) > pip install PACKAGE_NAME

パッケージのアンインストール

(.venv) > pip uninstall PACKAGE_NAME

インストール済みパッケージの更新

(.venv) > pip install --upgrade PACKAGE_NAME

インストール済みパッケージの情報表示

(.venv) > pip show PACKAGE_NAME

インストール済みパッケージの一覧表示

(.venv) > pip list

仮想環境を起動していない状態でpipコマンドを使うと、システム側のPythonが操作対象となるので注意する必要がある。

仮想環境が起動している状態でコマンドpip install PACKAGE_NAMEを実行すると、フォルダPROJECT_DIR\.venv\Libの中にパッケージがインストールされるが、仮想環境を起動していない状態では、システム側のフォルダC:\Python<Version>\Libの中にパッケージがインストールされる。

補足説明

複数のバージョンの公式版Pythonをインストールした場合、システム側のPythonのコマンド "pip" も "pip3.12" のようなバージョン番号付きのコマンドを使わなければいけなくなる。 コマンド "pip" でアクセスできるのは最後にインストールしたバージョンのものだけになる。

ChocolateyによるWindowsパッケージ管理

仕事上の事情により、しばらくWindowsをメイン開発環境として使わざるをえなくなった。

事情というのは、企業向けエンジニア教育に関わることになったからだ。日本国内の大抵の企業ではデフォルトPCとしてWindows機が使われることが多い。ベンチャーやスタートアップ企業ではMacの方がメジャーなのは知っているが、そうでない一般企業向けという前提条件がつくと、Windowsの方をデフォルトPC環境だと想定せざるをえない。

もう一つの事情として、MacでAI開発をやりたいからだ。MacNVIDIA GPUを利用するにはWindowsを使うしか方法がない。それで、eGPUを接続したIntel MacWindows上に機械・深層学習、生成AI用開発環境を構築する作業も行っている。

ここ20年程ずっとMacを仕事とプライベート両方の常用メイン機として使ってきた。開発用でもMacまたはUbuntu Linuxをデフォルトとして使っていて、どうしても必要な場合のみWindowsを利用していた。久しぶりにWindows(具体的にはWindows 11 Pro)も開発メイン機として使い始めたが、常用環境として使うのはWindows XP以来だ。

Windows周りも進化していて、Chocolateyというパッケージ管理ツールを利用することでプログラム管理がずいぶんやり易くなっている。

chocolatey.org

昔は素のWindowsに十全な仕事&開発環境を構築するには2〜3日かかったものだが、Chocolateyを利用すると1日あれば構築できる。アプリやツールの導入や削除が楽にできるので、できるだけChocolateyでインストール可能なものしか使わないようにしている。

MacのHomebrew、Ubuntuのapt-getコマンドに相当するのがこのChocolateyだと言えるだろう。

WSLを利用してUbuntu環境を構築することもできるし、Dockerを利用すればUbuntuMacを使う場合との差はほとんどない。Visual Studioさえ使わなければだが、WindowsでのUnixライクな開発は昔より随分やり易くなっている(逆に言うと、Visual Studioを使う開発ケースが極端に減っている。エンジニア向け求人サイトで探しても、Windows系開発案件はほとんど見なくなった。需要優先順としてWeb/スマホ・ファーストになって、Windows用デスクトップ・ソフトウェアを開発する必要性が低下したからだろう)。

今後Windows関連の記事も書くことになるだろうから、自分の備忘録も兼ねて、Chocolateyの使い方を書いておく。

Chocolateyのインストール

Chocolateyには個人利用(Individual)向けのCommunity版と企業(Bussines)向けのPro版がある。

前者は、管理者権限で開いたPowerShellから以下のコマンドを実行することでインストールできる。

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

ただし、このコマンドは将来変更される可能性があるので、以下のリンクページで確認した方が良い。

Chocolatey Software | Installing Chocolatey

Chocolateyによるパッケージ管理コマンド

Chocolateyのコマンドは常に管理者権限で開いたPowerShellから実行する必要がある。

パッケージのインストール

choco install PACKAGE_NAME

パッケージのアンインストール

choco uninstall PACKAGE_NAME

インストール済みパッケージの更新

choco upgrade PACKAGE_NAME

インストール済み全パッケージの更新

choco upgrade all

上の各コマンドでは操作処理の実行前に確認を尋ねられるが、choco install -y PACKAGE_NAMEのように-yオプションを付加すると、これを回避して実行できる。

インストール済みパッケージ一覧の表示

choco list

パッケージの検索

choco search PACKAGE_NAME

インストール済み全パッケージ情報の出力

choco export PACKAGELIST_FILE

Chocolatey GUI

ChocolateyにはGUIアプリが在り、これを使ってパッケージ操作を行うこともできる。

Chocolatey GUIは下のコマンドによってインストールできる。

choco install chocolateygui

パッケージ情報のエクスポート

Chocolatey GUIには、インストール済み全パッケージ情報をファイル出力する機能がある。この機能を利用すると、他のPCに同じパッケージを一括してインストールすることができる。

Chocolatey GUIの画面右上のフロッピー・マークのボタンがその機能で、これをクリックすると、インストール済み全パッケージ情報をファイルとして出力できる。これはコマンドchoco export PACKAGELIST_FILEと同じ機能で、エクスポートされたファイルは下のようなXML形式のテキストファイルになっている。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="010editor" version="14.0.0" />
  <package id="010editor.install" version="14.0.0" />
  <package id="7zip" version="23.1.0" />
  <package id="7zip.install" version="23.1.0" />
  <package id="adobe-source-sans" version="3.052" />
  <package id="adobe-source-serif" version="4.005" />
  ....    ....
  ....    ....
</packages>

下のようなコマンドによってこのファイルを指定すると、そのファイル内に記述されたパッケージを一括してインストールすることができる。

choco install PACKAGELIST_FILE

Chocolateyパッケージの探し方

Chocolateyのパッケージは下のページで検索することができる。

community.chocolatey.org

Community版パッケージはメンテナンスされていないものあり、パッケージによってはインストールに失敗することがある。そういうパッケージはかなりの数あるが、その場合は同種の別のパッケージを探すか、諦めるしかない。と言っても、よく使われるメジャーなアプリやツールは大抵インストールに成功するみたいだが。

補足情報

パッケージによっては、以下のようなChecksumエラーのメッセージが出力されてインストールに失敗する場合がある。

> choco install -y free-hex-editor-neo
Chocolatey v2.2.2
Installing the following packages:
free-hex-editor-neo

Progress: Downloading free-hex-editor-neo 7.25.0.8449... 100%

free-hex-editor-neo v7.25.0.8449 [Approved]
....    ....
....    ....

Downloading free-hex-editor-neo
  from 'https://www.hhdsoftware.com/Download/free-hex-editor-neo.exe'
Error - hashes do not match. Actual value was 'D7951CB8E808FD626E5BAA4E0F110FBF449A906C'.
ERROR: Checksum for 'C:\Users\LOGINUSER\AppData\Local\Temp\chocolatey\free-hex-editor-neo\7.25.0.8449\free-hex-editor-neo.exe' did not meet 'a565b93de5fe6efc0d3c934e9c3414e78a6ce0cf' for checksum type 'sha1'. Consider passing the actual checksums through with --checksum --checksum64 once you validate the checksums are appropriate. A less secure option is to pass --ignore-checksums if necessary.
The install of free-hex-editor-neo was NOT successful.
Error while running 'C:\ProgramData\chocolatey\lib\free-hex-editor-neo\tools\chocolateyinstall.ps1'.
 See log for details.

Chocolatey installed 0/1 packages. 1 packages failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Failures
 - free-hex-editor-neo (exited -1) - Error while running 'C:\ProgramData\chocolatey\lib\free-hex-editor-neo\tools\chocolateyinstall.ps1'.
 See log for details.

その場合は、下のように--ignore-checksumオプションを付加してコマンドを実行すると、インストールできる。

> choco install -y --ignore-checksum free-hex-editor-neo

これまでMacかUbiuntu Linuxを前提環境とした記事しか書いてこなかったが、いままで書いた記事の内容でWindows環境での情報も取得できたら、それも記事として書いていこうと思っている。

【参照リンク】

qiita.com

【Python】Jupyter Notebookのインストールと環境構築

Stable Diffusionを使うようになって、Google ColabやSageMakerを利用してノートブックでプログラム作成をすることが多くなってきた。

少し前にディープラーニング開発をやっていた頃は、ローカルPC上でJupyter Notebookを使ってプログラムを作ることはよくやっていたが、しばらくこういうことはやっていなかった。

Stable Diffusionを利用した画像生成や再開するディープラーニング機械学習開発でも使うことが多くなってくるので、改めてGPU搭載PCにJupyter Notebookをインストールしてローカルなノートブック開発環境構築した。

jupyter.org

自分の備忘録も兼ねて、Jupyter Notebookのインストールと環境構築の方法を記事に書いておくことにする。

Jupyter Notebookには、初期の頃からのノートブック単独版と(IDE的拡張が追加されている)JupyterLab版の2つの種類がある。「Jupyter Notebook」で検索するとこの両方の情報が混在ヒットして、記載されているインストール手順が違っていたりする。この辺の事情が分かっていない人は混乱するんじゃないだろう。

本記事では、ノートブック単独版をJupyter Notebook、JupyterLab版をそのままJupyterLabと呼んで、この2つのインストール方法を分けて記載する。

Jupyter Notebookのインストール

Jupyter Notebookのインストール方法として、システム側に入れるのと、言語ツール環境に入れるのの2つの方法がある。後者の場合は、さらにグローバル環境または仮想環境に入れるのの2つの方法がある。

Jupyter Notebookをシステム側に入れる

$ sudo apt install python3-pip
$ pip3 install jupyter notebook
% brew install jupyter

Jupyter Notebookを言語ツールのグローバル環境に入れる

pyenvを使っている場合

$ pyenv install 3.10.12
$ cd
$ pyenv global 3.10.12
$ python --version
Python 3.10.12
$ pip install jupyter notebook

asdfを使っている場合

$ asdf install python 3.10.12
$ cd
$ asdf global python 3.10.12
$ python --version
Python 3.10.12
$ pip install jupyter notebook

Jupyter Notebookを言語ツールの仮想環境に入れる

pyenvを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ pyenv local 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10
$ pipenv install jupyter notebook

asdfを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ asdf local python 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10
$ pipenv install jupyter notebook

JupyterLabのインストール

JupyterLabもインストール方法として、システム側、言語ツールのグローバル環境、言語ツールの仮想環境に入れるのの3つの方法がある。

JupyterLabをシステム側に入れる

$ sudo apt install python3-pip
$ pip3 install jupyterlab
% brew install jupyterlab

JupyterLabを言語ツールのグローバル環境に入れる

pyenvを使っている場合

$ pyenv install 3.10.12
$ cd
$ pyenv global 3.10.12
$ python --version
Python 3.10.12
$ pip install jupyterlab

asdfを使っている場合

$ asdf install python 3.10.12
$ cd
$ asdf global python 3.10.12
$ python --version
Python 3.10.12
$ pip install jupyterlab

JupyterLabを言語ツールの仮想環境に入れる

pyenvを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ pyenv local 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10
$ pipenv install jupyterlab

asdfを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ asdf local python 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10
$ pipenv install jupyterlab

Jupyter Notebook/JupyterLabの起動実行

Jupyter Notebook

Jupyter Notebookをシステム側、言語ツールのグローバル環境に入れた場合

$ jupyter notebook
....    ....
....    ....

    To access the server, open this file in a browser:
        file:///home/USERNAME/.local/share/jupyter/runtime/jpserver-xxxxx-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/tree?token=9c18d70a......
        http://127.0.0.1:8888/tree?token=9c18d70a......
....    ....
....    ....

Jupyter Notebook起動後のノートブック作成手順はJupyterLabと同じなので、下記のJupyterLabの記載を参照のこと。

Jupyter Notebookを言語ツールの仮想環境に入れた場合

$ cd PROJECT_DIR
$ pipenv run jupyter notebook

JupyterLab

JupyterLabをシステム側、言語ツールのグローバル環境に入れた場合、

$ jupyter lab
....    ....
....    ....

    To access the server, open this file in a browser:
        file:///home/USERNAME/.local/share/jupyter/runtime/jpserver-xxxxx-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/tree?token=f37955ad......
        http://127.0.0.1:8888/tree?token=f37955ad......
....    ....
....    ....

ブラウザからURLlocalhost:8888にアクセスすると、JupyterLabのログイン画面が表示される。

上のJupyterLabの起動時に表示されたトークンの値を[Password or token:]に入力して[ Log in ]を押すと、下のような画面に変わる。

ファイル一覧からいずれかのディレクトリを開いた状態で、メニュー[File] > [New] > [Notebook]を選ぶと、そのディレクトリの中にノートブックが作成され、使用するカーネルの選択を聞かれるので、いずれかのカーネルを選択すれば、新しいノートブックが表示される。

JupyterLabを言語ツールの仮想環境に入れた場合

$ cd PROJECT_DIR
$ pipenv run jupyter lab

Jupyter Notebook/JupyterLabの設定

インストール後のデフォルト状態では、Jupyter Notebook/JupyterLabはトークンによるログイン、ポート番号8888になっているが、セキュリティ的見地からこれらの設定は変更しても良いだろう。

以下の操作によって、これらの設定を変更できる

Jupyter Notebook

$ jupyter notebook --generate-config
Writing default config to: /home/USERNAME/.jupyter/jupyter_notebook_config.py
# Jupyter Notebookのパスワードを設定
$ jupyter notebook password
Enter password:     # パスワードを入力
Verify password:    # パスワードを再入力
[JupyterPasswordApp] Wrote hashed password to /home/USERNAME/.jupyter/jupyter_server_config.json

# Jupyter Notebookサーバーのポート番号を変更
$ vi ~/.jupyter/jupyter_notebook_config.py 
- # c.ServerApp.port = 0
+ c.ServerApp.port = 5555

JupyterLab

$ jupyter lab -–generate-config
Writing default config to: /home/USERNAME/.jupyter/jupyter_lab_config.py
# JupyterLabのパスワードを設定
$ jupyter lab password
Enter password:     # パスワードを入力
Verify password:    # パスワードを再入力
[JupyterPasswordApp] Wrote hashed password to /home/USERNAME/.jupyter/jupyter_server_config.json

# JupyterLabサーバーのポート番号を変更
$ vi ~/.jupyter/jupyter_lab_config.py 
-# c.ServerApp.port = 0
+c.ServerApp.port = 5555

VSCode用Jupyter Notebook環境の構築

ブラウザからJupyter Notebookを使うのも悪くはないが、プログラム開発にVisual Studio Codeを常用している身としては、VSCodeでノートブック・プログラミングをやりたくなってくる。

VSCode拡張機能 "Jupyter" をインストールすると、VSCode上でもノートブックが利用できるようになる。

VSCodeではプロジェクト・ディレクトリ単位でのプログラム作成・編集になるので、Jupyter Notebookを言語ツールの仮想環境に入れる場合についてだけ説明しておく。仮想環境によってプロジェクト毎にノートブックで使用するPythonのバージョンを変えられるので、これがもっとも合理的な使い方ではないだろうか。

Jupyter Notebook用仮想環境を作成する

pyenvを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ pyenv local 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10

asdfを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ asdf local python 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10

VSCode用Jupyter Notebookカーネル環境を作成する

$ pipenv shell
$ pip install ipykernel
$ ipython kernel install --user --name=pipenv_3.10.12
$ exit

オプション--nameに指定するのはJupyter Notebookカーネルの名前だが、これは任意で良い。

VSCode側のJupyter Notebookカーネルの設定

VSCode拡張機能Jupyterをインストールする。

上記で作成した仮想環境のディレクリトをVSCodeから開く。

拡張子 .ipynb のファイルを作成すると、ノートブックとして認識され、Jupyter Notebookのカーネルを選べるようになる。

右上の[Select kernel]を押すと、[Jupyter Kernel...]というメニューが表示されるので、これを選ぶと上で作成したカーネルの名前が出てくる。

当該カーネルを選ぶと、それがノートブックで使用されるカーネルとして設定される。

小生は、ローカルPCでJupyter Notebookを利用するときはこのVSCodeを使う方法を常用している。ノートブック作成に使うのはほとんどこちらの方だけだ。JupyterLab固有の機能を使うときだけそちらを利用している

【追記】〔2023-12-22〕

上で利用しているipykernelライブラリによるJupyter Notebookカーネルの簡単な扱い方を備忘録として書いておく。

ipython kernel install --user --name=KERNEL_NAME
jupyter kernelspec uninstall KERNEL_NAME
jupyter kernelspec list

【参照リンク】

www.geekfeed.co.jp

zenn.dev

【Python】pipenvによる仮想環境構築

以前の記事にPoetryによるPython仮想環境の構築方法について書いたが、最近はPython仮想環境としてPoetryではなく、以前使っていたpipenvをまた使うようになっている。

blog.ketus-ix.work

Poetryはパッケージ管理方法が独特で何だか使いにくく感じられるようになってきた。GitHubなどに上がっているPythonプログラムはvirtualenvやpipenvを利用してるものものが多いし、requirements.txtの扱いもpipenvの方がやリ易い。

pipenv.pypa.io

自分の備忘録として、pipenvのインストールと使い方を記事として残しておくことにする。

pipenvのインストール

pipenvのインストール方法として、システム側に入れるのと、言語ツール環境に入れるのの2つの方法がある。

pipenvをシステム側に入れる

$ sudo apt install python3-pip
$ pip3 install pipenv
% brew install pipenv

pipenvを言語ツール環境に入れる

pyenvを使っている場合

$ pyenv install 3.10.12
$ cd
$ pyenv global 3.10.12
$ python --version
Python 3.10.12
$ pip install pipenv

asdfを使っている場合

$ asdf install python 3.10.12
$ cd
$ asdf global python 3.10.12
$ python --version
Python 3.10.12
$ pip install pipenv

pipenvによる仮想環境作成/削除

仮想環境の作成

pyenvを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ pyenv local 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10.12
Creating a virtualenv for this project...
Pipfile: /Users/LOGNAME/PROJECT_DIR/Pipfile
Using /Users/LOGNAME/.anyenv/envs/python/3.10.12/bin/python3 (3.10.12) to create virtualenv...
⠸ Creating virtual environment...created virtual environment CPython3.10.12.final.0-64 in 1593ms
....    ....
....    ....

✔ Successfully created virtual environment!
Virtualenv location: /Users/LOGINUSER/PROJECT_DIR/virtualenvs/.venv
Creating a Pipfile for this project...

asdfを使っている場合

$ mkdir PROJECT_DIR
$ cd PROJECT_DIR
$ asdf local python 3.10.12
$ python --version
Python 3.10.12
$ pipenv --python 3.10
Creating a virtualenv for this project...
Pipfile: /Users/LOGNAME/PROJECT_DIR/Pipfile
Using /Users/LOGNAME/.asdf/installs/python/3.10.12/bin/python3 (3.10.12) to create virtualenv...
⠸ Creating virtual environment...created virtual environment CPython3.10.12.final.0-64 in 1593ms
....    ....
....    ....

✔ Successfully created virtual environment!
Virtualenv location: /Users/LOGNAME/.local/share/virtualenvs/PROJECT_DIR-zadK1Q9j
Creating a Pipfile for this project...

仮想環境が作成されると、Pipefileというファイルが作成される。この中にインストールしたパッケージ情報が記述される。

また、以下の環境変数を設定しておくと、プロジェクトディレクトリの中に.venvというディレクトリが作成され、仮想環境のPythonインタープリタおよびパッケージはこの中にインストールされる。

export PIPENV_VENV_IN_PROJECT=true

仮想環境の削除

$ cd PROJECT_DIR
$ pipenv --rm

pipenvによるパッケージ管理

パッケージの追加

$ pipenv install PACKAGE_NAME

開発用パッケージの追加

$ pipenv install --dev PACKAGE_NAME

パッケージの削除

$ pipenv uninstall PACKAGE_NAME

pipenvによるPythonプログラム実行

仮想環境によって直接プログラムを実行

$ pipenv run python PROGRAM.py

仮想環境を起動して、プログラムを実行

$ pipenv shell
$ python PROGRAM.py

プロジェクトのパッケージ管理

PipfilePipfile.lockの存在するプロジェクトで(使用バージョンの)パッケージをインストールする

$ pipenv sync

Pipfileから(最新バージョンの)パッケージをインストールする

$ pipenv install

Pipfileからパケージをインストールし、アップデートがあればアップデートする

$ pipenv update 

requirements.txtを作成する

$ pipenv lock -r > requirements.txt

requirements.txtを利用してパッケージをインストールする

$ pipenv install -r requirements.txt

Stable Diffusion Web UI | SageMaker無料プランを利用して画像生成

GPU搭載ノートPCにStable Diffusion Web UIを導入して本格的に画像生成をやり始めた。

外出中も画像生成がやりたくて、そこそこ重量(GPU搭載機は大抵2kg強)のあるノートPCを持ち歩いたりしている。しかし、やはり重さには耐えられられず、長時間の外出には軽量ノートPCしか持っていかなかったする。

Google ColabのGPUリソースを利用して画像処理や機械学習プログラムを作ったりしたことはあったが、いままで画像生成には使ったことはなかった。Google Colabの無料プランでは最近Stable Diffusion Web UIの使用に制限がかけられるようになって、10分位使うと警告が表示されるようになったそうだ。この警告を無視してそのままを使い続けると、アカウントが停止されてしまうんじゃないだろうか。

Google ColabでStable Diffusion Web UIを動かして画像生成を行う方法が掲載されているサイトがあるが、現在無料プランではこの方法は使えないので、やりたかったら有料プランに移行するしかない。小生もこれからGoogle Colabで画像生成をやってみよう思っていた矢先に、この情報を知った。

そこで、Google Colab無料プランに代わる方法を探してみたら、Amazon SageMaker Studio Lab(SageMaker Studio無料プランの名前)でGPUリソースを使えることを知った。これとngrokというサービスを組み合わせると、SageMakerを利用してStable Diffusion Web UIによる画像生成ができるらしい。さっくこの方法を試してみた。

SageMaker Studio Labのアカウント作成

現状SageMaker Studio Labのアカウトはリクエスト方式で作成するらしい。

下のサイト画面の[Request free account]を押して、開いた画面にメールアドレスと要求されている情報を入力すればアカウント作成申請が出せる。

実際にやってみると、小生の場合は、アカウント作成申請を出してから24時間で申請認可メールが送信されてきた。

アカウント申請認可メールに記載されているリンクにアクセスすると、SageMaker無料プランの新しいアカウントを作成することができる。

ngrokのアカウント作成

ngrokというのは、ローカルPC上で稼働しているHTTPサーバーを外部公開できるサービスだ。無料と有料プランあるが、無料プランでも十分な機能が使えて、今回の目的に問題なく利用できる。

ngrok.com

ngrokのサイトのトップ画面から[Sign up for free]を押して、開いた画面に必要な情報を入力すればアカウントを作成できる。

ngrokのアカウントを作成したら、Authtokenというものを記録しておく。これがngrokのサービスを利用するためのAPIトークンになる。

SageMaker版Stable Diffusion Web UIノートブックの作成

SageMaker StudioはJupyter Notebookを使ってPythonプログラムを実行できるサービスだが、SageMaker用のStable Diffusion Web UIノートブックを公開掲載しているサイトがある。

github.com

このGitHubページに掲載されているノートブックを利用すると、簡単にSageMaker上でStable Diffusion Web UIを実行することができる。

このページのSageMaker用ノートブックはモデル別に分かれており、一つの作者モデルとStable Diffusion Web UIを組み合わせた全部で150超もの種類が用意されている。HunggingFaceとCivitai上の有名なモデルがほぼ網羅されており(逆に、このサイトに掲載されているモデル名をCivitaiで検索することで、どんなモデルが有名で良く利用されているのか知ることができた)、この中から好みのモデルが組み込まれたものを選んでノートブックを作成すると、そのモデルを使った画像生成がすぐに始められようになっている。ここまでやってくれるのは素晴らしいことだ。感謝の意を表しながら、有り難く使わせてもらおう。

本ページ上の適当なモデルのノートブックを選んで、その右側の[nightly]というリンクをクリックする。

すると、SageMakerのサイトへ移動して下のような画面になる。この画面の[Compute type]GPUを選んで[▶ Start runtime]を押すと、GPUインスタンスが開始される。GPUインスタンスが開始されると、[Copy to project]が押せる状態になる。

ただし、[▶ Start runtime]を押しても、警告が表示されてGPUインスタンスが開始されないときがある。利用ユーザーが多くGPUインスタンスに空きがないとこうなるのだろう。この場合は、しばらく待ってから何回か上の操作を繰り返すと、GPUインスタンスを取得できるようだ(ただし、時間帯によっては何度トライしてもGPUインスタンスを取得できないときがある。その場合は、数十分待ってから再度トライしてみると良い)。

上の画面の[Copy to project]を押すと、続いて下のような画面が表示されるので、ここでは[Copy Notebook Only]という選択肢をクリックする。

さらに、下の画面が表示されたら、そのまま[Select]を押す。

すると、新しいノートブックが作成されて、その中に上述のGitHubページで選択したリンク元のソースがコピーされる。

SageMaker版Stable Diffusion Web UIノートブックの実行

SageMaker上にノートブックが開いたら、その中のソースコードの一番下の行に"enter_ngrok_authtocken_here"という記述があるので、これを前述のngrokのAuthtokenの値に置き換える。

ここまでの操作が済んだら、本画面上部のボタンを押せば、このノートブックが実行される。

数分待つと、下のようなhttps:/**********.ngrok-free.appというリンクが存在するメッセージが表示されるので、このリンクをクリックする。

すると、下のような画面が表示される。

この画面の[Visit Site]ボタンを押すと、ブラウザ上にStable Diffusion Web UIの画面が起動する。あとは、この画面を使って画像生成を行うことができる。

補足情報

SageMaker上でStable Diffusion Web UIのノートブックを実行したときに、下のようなエラー・メッセージが表示されてノートブックが停止することがある。

TypeError: __init__() got an unexpected keyword argument 'socket_options'

その場合は、ノートブック内のソースコードに以下のような一行を追加して、再度ノートブックを実行すると解決できる。

  !mkdir /home/studio-lab-user/content
  %cd /home/studio-lab-user/content

  %env TF_CPP_MIN_LOG_LEVEL=1

  %conda install -q -y aria2
  %conda install -q -y libglib2.0-0
  %conda install -q -y glib
  %pip install -q opencv-python-headless huggingface-hub
  !pip install -q torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1+cu118 torchtext==0.15.1 torchdata==0.6.0 --extra-index-url https://download.pytorch.org/whl/cu118 -U
  !pip install -q xformers==0.0.18 triton==2.0.0 -U
+ !pip install -q httpx==0.24.1 -U

  !git clone -b v2.2 https://github.com/camenduru/stable-diffusion-webui
  ....    ....
  ....    ....
  ....    ....
  ....    ....

SageMaker版Stable Diffusion Web UIノートブックの停止

Stable Diffusion Web UIを使い終わったら、実行中のノートブック・セッションを停止するのを忘れないようにしよう。

ブラウザ上にSageMakerのセッション開始画面が残っているなら、それを表示させる。あるいは、ノートブック画面からメニュー[Amazon SageMaker Studio Lab][Open Project Overview Page]を選ぶと同じ画面が開くので、この中の[■ Stop runtime]を押すと、現在のセッションが停止される。

こうしておくと、残りのセッション時間分は後でまた続けて使うことができる。1回のセッションで最大4時間、24時間で合計4時間使用可能だ(少し前まで合計8時間だったらしい)。

SageMaker版Stable Diffusion Web UIにモデルを追加する方法

SageMaker無料プランには15GBの永続ストレージが付属している。

15GBでは複数のモデルを一度に使い分けるのは無理があるが、SageMaker用Stable Diffusion Web UIノートブックのファイル構成はオリジナルと同じなので、モデルファイルをコピーしてやればモデルを追加することはできる。

SageMakerノートブックの左上のフォルダ・マークをクリックすると左側にファイルビュー・パネルが開くので、ここでディレクトリをcontent/models/Stable-diffusionと辿って、ファイルビューの中にモデルファイルをドラッグするか、あるいは本画面上部の上向き⬆ボタンをクリックして、モデルファイルを選択してやればコピーできる。

追加したモデルを利用するには、本画面上部のを押して一旦を停止させてもう一度ボタンを押してノートブックを再起動するか、あるいはStable Diffusion Web UI画面の[Stable Diffusion checkpoint]メニュー横の更新ボタンをクリックすれば選択できるようになる。

一つのモデルファイルのサイズは大体2〜10GB位なので、追加できたとしても全部で2〜3個のモデルが限界ではないだろうか。生成作成される画像分のストレージ空き容量も考慮する必要があるので、モデルを変更したければ、既存のモデルファイルを削除して新しいものをコピーした方が良い。

 

本記事の方法を使えば、(画像生成処理を実行しているのはSageMakerのGPUインスタンスなので)低スペックなPCでも画像生成を行うことができる。外出中にインターネットが利用できる場所で数時間の空きがあったら、そのときに画像生成をやることができる。手軽に始められるのにStable Diffusion Web UIが使えるので、いまのところこの方法が気に入っている

現在はSageMakerのGPUインスタンスを取得するのに、それほど待たされない状況だ。しかし、SageMakerの無料プランでGPUリソースの利用者が増えてくると、さらにセッション時間が減ったり、将来Google Colabの無料プランと同じように制限される可能性もあるかもしれない。クラウドGPUリソースを使って本格的に画像生成をやるなら、やはりいずれかのコンピューティングサービスの有料プランを利用する方が良いのだろう。

【参照リンク】

note.com

Stable Diffusion Web UI|Ubuntu 22.04でのインストール

前記事でEasy Diffusionというものを紹介したが、同様のプログラムとしてStable Diffusion Web UIというのがある。

blog.ketus-ix.work

じつは、Stable Diffusionを利用して画像生成をやるなら、こちらが本命のプログラムだ。画像生成処理に適用できる数多くのパラメータが用意されており、それらを調整することで多種多様な画像を生成できる。インターネット上での使い方などの情報量が多く、モデル配布サイトでもこのStable Diffusion Web UI用のパラメータ設定値が記載されていることが多い。

お触り入門的にやるなら、Easy Diffusionでも良いと思うが、本気でStable Diffusionによる画像生成をやるなら、現状このAUTOMATIC1111版Stable Diffusion Web UIの一択だと言って良いほど広く使われている。

github.com

このStable Diffusion Web UIをUbuntu 22.04上にインストールして使い始めたので、自分の備忘録も兼ねて、その手順を書いておく。

NVIDIA GPUドライバのインストール

前記事では、CUDA ToolkitとcuDNNのインストール方法の説明は省略したが、本記事では書いておこう。

ただし、この2つは後述のAnacondaやMinicondaを使って作成したPython仮想環境の中にインストールすることもできる。システム側のCUDA,cuDNNとは分離された環境となるので、この方が融通性が高い(システム側のCUDA,cuDNNは別のソフトウェアの開発用に使っているので、弄るのは避けたかったという理由もある)。今回はこの方法を使った。

このような環境を作るのための条件として、システム側にNVIDIA GPU用ドライバがインストールされている必要がある。同ドライバがまだインストールされていない場合(nvidia-smiコマンドで確認できる)は、以下の操作によってインストールすることができる。

ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0 ==
modalias : pci:v000010DEd0000249Csv00001043sd00001602bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
driver   : nvidia-driver-545 - third-party non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-520 - third-party non-free
driver   : nvidia-driver-470 - third-party non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-545-open - third-party non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin
  

GPUの種類にもよるが、大抵はrecommendedとして最新バージョンが推薦されるはずだ。CUDAやcuDNNを利用する場合は、この推薦されているバージョンの-openでない方を選択する。

つまり、上のような出力情報なら、nvidia-driver-545をインストールするべきだ。

sudo apt install nvidia-driver-545
reboot

nvidia-driverをインストールしたら、システムを再起動しておく。

Stable Diffusion Web UI用Python仮想環境の作成

Minicondaのインストール

Stable DiffusionはPythonで記述されたプログラムなので、稼働ベースとしてPython仮想環境を利用するケースが多い(システム側のPythonを使うのは避けた方が良い)。

Python仮想環境ツールにはいくつかの種類があるが、Stable Diffusionを使うときに広く利用されているのはAnacondaやMinicondaなどのconda系仮想環境のようだ。

ここでは、Minicondaを使うことにする。

curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh

なお、言語環境ツールとしてpyenvやasdfを利用している場合は、以下のコマンドによってMinicondaをインストールすることができる。

  • pyenv
pyenv install miniconda3-latest
pyenv global miniconda3-latest
asdf install python miniconda3-latest
asdf global python miniconda3-latest

Python仮想環境の作成

Stable Diffusion Web UI用の仮想環境を作成する。仮想環境の名前は任意で良いが、ここではsdwebuiとしておく。

conda deactivate
conda create --name sdwebui python=3.10
conda activate sdwebui

CUDAとcuDNNのインストール

作成した仮想環境の中にCUDAとcuDNNをインストールする。

conda install -c conda-forge cudatoolkit=11.8.0
pip install nvidia-cudnn-cu11==8.6.0.16

さらに、CUDAとcuDNNライブラリへのパスを通すために、以下のような設定を追加する。

mkdir -p $CONDA_PREFIX/etc/conda/activate.d
echo 'CUDNN_PATH=$(dirname $(python -c "import nvidia.cudnn;print(nvidia.cudnn.__file__)"))' > $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib:$CUDNN_PATH/lib' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh

上の操作が済んだら、この仮想環境を再起動する。

conda deactivate
conda activate sdwebui

Stable Diffusion Web UIのインストール

インストール

上記でcondaコマンドによって作成したPython仮想環境上にStable Diffusion Web UIをインストールするので、この仮想環境がアクティブ状態になっていることが、同プログラムのインストールおよび起動条件となる。もし仮想環境がアクティブ状態になっていない場合は、上で作成した仮想環境をconda activate sdwebuiコマンドによってアクティブ状態にしておく。

Stable Diffusion Web UIのインストールは、以下のように、ソースを取得した上でシェルスクリプトwebui.shを実行すれば開始できる。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui
./webui.sh

インストール処理が完了すると、自動的にブラウザが起動して、その中に下のような画面が表示される(ベージURLは127.0.0.1:7860)。

補足情報

COMMANDLINE_ARGSの設定

GPUを利用した画像生成処理の高速化が図れるxFormersを有効にする場合、ファイルwebui-user.shを以下のように編集する。

vi webui-user.sh
-#export COMMANDLINE_ARGS=""
+export COMMANDLINE_ARGS="--xformers"

Stable Diffusion公式でもこの機能を有効することが推薦されており、確かにGPU搭載機では画像生成が速くなるので、NVIDIA GPU搭載機の場合はデフォルトでこの機能を有効にした方が良い。

GPU VRAMが4GBより小さい場合は、COMMAND_ARGS=の設定を下のようにすると、画像生成処理でVRAMメモリがより効率的に使われる。

COMMAND_LINE_ARGS="--xformers --medvram --opt-split-attention"

GPU VRAMが8GBより小さい場合は、同設定を下のように変更すると、画像生成処理でVRAMメモリがより効率的に使われる。

COMMAND_LINE_ARGS="--xformers --lowvram --opt-split-attention"

webui.shによるインストールの結果、PyTorch 2.0以降が追加された場合(webui.sh起動時の出力情報、またはpip listコマンドで確認できる)は、以下にように変更することで、--xformersと同等の画像生成処理の高速化が図れる。

-export COMMANDLINE_ARGS="--xformers"
+export COMMANDLINE_ARGS="--opt-sdp-attention --opt-sdp-no-mem-attention"

現在、小生のGPU搭載機ではこの設定を使っているが、この辺の設定はStable Diffusion Web UIのバージョンによって違ってくるので、あくまでこれは参考情報として見てほしい。

Cannot locate TCMalloc警告の解決

シェルスクリプトwebui.shを実行すると、Cannot locate TCMalloc (improves CPU memory usage)という警告メッセージが表示されるが、下のコマンドによってTCMalloc(GoogleC/C++用メモリアロケータ)をインストールすれば、これを回避できる。

sudo apt install --no-install-recommends google-perftools

仮想環境の自動起動

シェルスクリプトwebui.shによるStable Diffusion Web UIの起動時に、自動的に仮想環境を起動したいなら、以下をwebui-user.shの先頭に追加しておく。

#!/bin/bash
eval "$(conda shell.bash hook)"
conda activate sdwebui

Stable Diffusion Web UIの動作確認

Stable Diffusion Web UIの初歩的な使い方はEasy Diffusionと似ている。

説明文だけから画像を生成する場合は、[txt2img]タブ画面上のテキストボックスにプロンプト文を入力して、[Generate]ボタンを押す。モデルから画像を生成したい場合は、[Stable Diffusion checkpoint]メニューからモデルを選んで、同タブ画面上のテキストボックスにプロンプト文を入力してした上で、[Generate]ボタンを押すと、画像の生成が開始される。

モデルファイルをディレクトstable-diffusion-webui/models/Stable-diffusionへコピーして、Stable Diffusion Web UIを再起動するか、[Stable Diffusion checkpoint]メニュー横の更新ボタンを押せば、追加したモデルが選択できるようになる。

プロンプト用のテキストボックスが2つあるが、上側が生成したい画像の説明、下側が生成したい画像に対する否定的な説明を入力する。両方のプロンプト文を入力すると、より目的に合った画像が生成されやすくなるようだ。

前記事と同じように、適当に選んだモデルを使って、Stable Diffusion Web UIによる画像の生成をやってみた。お借りしたモデルとプロンプトはこちら。

civitai.com

civitai.com

【追記】〔2023-12-04〕

Intel MacにもStable Diffusion Web UIをインストールしてみた。インストールは問題なくできて(NVIDIA GPUドライバ、CUDA、cuDNNは当然インストールしていないが)、画像の生成もできることはできる。

ただし、やはり画像生成に時間がかかってしまう。上と同じ条件で画像を生成してみたが、1分40秒かかってしまった。NVIDIA GPU搭載機(VRAM 16GB)では2秒だから、この差は大きい。

小生はまだM1/M2 Macを持っていないんだけど、これらだと画像生成がもっと速くなるんだろうか。もし生成時間が1分以内になるのなら、M1/M2 Macでも画像生成を本格的にやれると思う。 やっぱり早くApple Silicon Macを手に入れないとダメだなぁ。

【参照サイト】

https://blog.csdn.net/weixin_41216652/article/details/131995014blog.csdn.net

pywkt.com