タグ: Python

  • Azure上でPythonを利用する場合のサポートバージョンのメモ

    Pythonとしての各バージョンとサポート期限は下記。概ね5年間のサポート。ただし、リリースされてからでないと、各種フレームワークなどが追随してこない。リリースされてから、開発等を始めるとすると、利用できる期間は4年間程度。開発会社によっては、常に最新のものを追いかけず、1つ前のバージョンをつかったりする可能性もあるので、もっと短くなる可能性もある。

    Pythonのリリースとサポート期限の一覧
    https://devguide.python.org/versions/

    Azure App Serviceの場合、Python 3.11のバージョンは指定できるが、Python 3.11.xのようなパッチバージョンまでは指定できない。サポートポリシーによると、Azure側でアップデートが行われる。言語のサポートが終了してもすぐに使えなくなるわけではなく、Azureのポリシーとしては「特定の言語のコミュニティ サポートが終了しても、アプリケーションは変更することなく引き続き実行できます。」とのこと。

    App Service 言語ランタイムのサポート ポリシー
    https://learn.microsoft.com/ja-jp/azure/app-service/language-support-policy

    Azure Functionsの場合は、ランタイムバージョン毎に、利用できる言語のバージョンが決まっている。そのため、利用したい言語のバージョンに合わせて、ランタイムバージョンを選択する必要がある。そして、言語側のサポートが終了すると、Azure Functionでも、サポートが終わる。

    Azure Functions でサポートされている言語
    https://learn.microsoft.com/ja-jp/azure/azure-functions/supported-languages

    Azure FunctionでのPythonのサポート状況と、サポート終了のお知らせ。
    https://azure.microsoft.com/ja-jp/updates/azure-functions-support-for-python-36-is-ending-on-30-september-2022/

  • Google ColabでWhisperを使っていたら「CUDA out of memory」が発生。

    Google Colabの環境に、Whisperをインストールして、いろいろと試していたところ、何回か実行していたら下記のエラーが発生した。

    /usr/local/lib/python3.7/dist-packages/torch/_utils.py in _cuda(self, device, non_blocking, **kwargs) 
         76             return new_type(indices, values, self.size()) 
         77         else: 
    ---> 78             return torch._UntypedStorage(self.size(), device=torch.device('cuda')).copy_(self, non_blocking) 
         79  
         80  
    RuntimeError: CUDA out of memory. Tried to allocate 128.00 MiB (GPU 0; 14.76 GiB total capacity; 12.98 GiB already allocated; 27.75 MiB free; 13.47 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

    エラーは、GPUのメモリが不足して、実行に必要なVRAMを確保できなかったため。

    Google Colabの環境でWhisperを動かしているうちに、VRAMを使い切ってしまい、それが開放されておらず、新規割り当てができなかった。実行自体は終わっているので、PyTorchでのVRAMの開放ができていなかったようだ。

    PyTorchのプロセスを切ってもよいのだが、Google Colabだと、その方が難易度が高い。そのため、Google Colabでは、「ランタイムを接続解除して削除」を行ってから、接続がよい。もしくは、一度、閉じて、新しく実行する。

    1時間くらいの動画をLargeの処理で、2回目はエラーになったので、何回も実行していくには再接続などの手間をかける必要がありそうだ。もっと長い動画の処理も注意が必要なのかもしれない。

  • WhisperをWindowsにインストールして使ってみる

    Whisperは、OpenAIがMITライセンスで公開した汎用音声認識モデル。機械学習の訓練済みのモデルなので、そのまま使うことができる。

    https://openai.com/blog/whisper/
    https://github.com/openai/whisper

    これを試すために、ほぼまっさらなWindows11 Proの上に、インストールして、実際に使ってみた。そのときの手順は下記。

    Pythonをインストール

    Pythonの公式サイトから、Windows用のインストーラーをダウンロードしてインストールする。

    Windowsでインストールするときは、ユーザ環境ではなく、ALLユーザの環境を選択して、インストール先をCドライブの下にフォルダを作成して、そこにインストールするのがよい。ユーザ環境にインストールする場合、ユーザ名で日本語が使われていたりして、実行時にエラーになるので。

    PyTorchをインストール

    インストールするコマンドを下記のpytorchのサイトで確認して実行する。

    https://pytorch.org/get-started/locally/

    NVIDIAのGPUがない普通のPC(とりあえずSurface Pro7)なので、PytorchもCPU版を選択した(CUDAなしの環境)。インストールは、Python標準についてくるpip3で。そのときのコマンドは下記。

    pip3 install torch torchvision torchaudio

    もし、pip3が見つからない場合は、Windowsを再起動してみる。パスが認識されていない可能性があるため。

    FFMPEGをインストール

    いろいろと検討したが、Windows用のパッケージ管理ツールのchocolateyを使うのが楽だった。

    まずは、chocolateyをインストールする。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://chocolatey.org/install.ps1'))

    インストール後、パスが正常に読み込まれていないようだったので、Windowsを再起動した。

    Powershellを管理者権限で開いて、下記のコマンドを実行してffmpegをインストールする。

    choco install ffmpeg

    Rustをインストール

    Whisperのページによると、念のため、 rustもインストールしておくとのこと。

    pip install setuptools-rust

    Gitをインストール

    下記のサイトからWindows用のGitをダウンロードしてインストールする。

    https://gitforwindows.org/

    インストールしたら、Windowsを再起動する。

    Whisperのインストール

    Powershellを開いて、下記のコマンドを実行する

    pip install git+https://github.com/openai/whisper.git

    やっとインストールが完了。

    Whisperで動画ファイルの音声起こしをやってみる

    Powershellを起動して、下記の書式でWhisperを利用する。実際に動作するのは、Pythonのコードだが、使うだけならPythonを起動させなくてもいい。

    whisper ファイル名 --language Japanese --model small

    「–model xxx」のxxxには「tiny」「base」「small」「medium」「large」を選択して、指定する。モデルは、処理速度と精度のトレードオフになる。モデルがmedium、largeと大きくなるほど、処理負荷が増える。

    利用するモデルの初回実行時には、モデルのダウンロードが行われるため、処理が始まるまでに時間がかかる。

    実際に、1時間程度のMP4の動画の文字起こしを、モデルsmallでさせてみたところ、第10世代のCore i5での処理で、5時間かかって、30分弱しか処理できていない。認識の精度としては、漢字への変換も含めて、かなり読める精度だ。「xxx代」が「xxx台」になっているとか、コンテキストを読まないと変換できないものは、違っているけれど、おおむね文字起こしできている。

    NVIDIAのGPUを入れて、CUDAで、Pytorchの処理をさせないと、高速化はできないということもわかった。CPUだけだと、向き不向きの不向きな処理なので、実用に耐えられる速度はだせないのかもしれない。「base」や「tiny」も試してみないことには結論はだせないけれども。

  • FreeBSD13.1にしたときにCertbotが消えていた

    FreeBSD13.1にアップグレードしたときに、pkgの更新も行ったためか、certbotがきえていた。Let’s Encryptの証明書が更新されているはずなのに、更新されず期限が切れたので、そこで気がついた。

    コマンドが消えて、エラーになった。(↓のコマンドが消えた)

    /usr/local/bin/certbot-3.8 renew

    pkgで探して、新しくインストール。

    pkg search certbot
    pkg install py39-certbot-1.27.0,1

    シンボリックリンクが作られていたので、そちらを利用して、証明書を更新した。そのあとに、Apacheを再起動。

    certbot renew
    httpd -k restart
  • SlackのエクスポートデータをExcelに入れる方法

    Slackのフリープランが直近の90日分しか表示できなくなった。過去のSlackのデータが見れなくなると困るということになり、データのエクスポートをして、Excelで見れるようにした。

    OSSのPythonのツールを使うので、Pythonを扱える環境が必要。めんどくさいので、Windows10のWSL2(Ubuntu)上で実行した。

    1. Slackからデータをエクスポートする

    2. エクスポートしたデータはZIP形式なので、展開する

    3. Pythonのデータ変換ツールをGithubから落として、展開する(実行ファイルはPythonのソース1つだけなので簡単)。このツールには本当に感謝。
    https://github.com/becky3/json_to_csv_for_slack

    4. 変換ツールを実行して、チャネルごとのCSVデータにする。
    一回のツール実行で、すべてのチャネルがCSVデータに変換された。

    python converter.py /mnt/c/展開したエクスポートデータのフォルダ

    実行するときは、展開したエクスポートデータのフォルダをフルパスで記載する。CSVファイルの出力先は、コマンド実行のあとに表示されている。

    5. Excelを空のブックで開く。

    6. メニューの「データ」から「テキストまたはCSVから」を選択する。直接、CSVファイルを開くと、文字化けするので、「データ」から読み込ませる。

    7. 4番で作成したCSVデータを指定して、開く。これでチャネルごとのシートになる。

    8. CSVファイルの数だけCSVの読み込みを行う。

    9. 最後はExcelのファイルを保存する。

    Excelにしてしまえば、あとは検索でも加工でも、自由にできる。

    おまけ。試行錯誤して、失敗した/あきらめた方法。

    ・ExcelのPowerQueryでJSONファイルを読み込ませる。
    →これは、1つ1つファイルを指定していけば、読み込みできた。
     ただ、フォルダを指定して、結合して読み込ませると、JSONの形式でエラーになり、取り込めず断念。

    ・PowershellでCSVファイルに加工する
    →結構、めんどくさい。時間かかりそうなので、やめた。

    ・JSONをSQL Serverに取り込んでから、ExcelやAccessで活用
    →JSONファイルをSELECT文で操作はできるが、DBに取り込むところがめんどくさい感じ。
     先にテーブル設計して、、、ならばいけそうだったが、時間がかかるのでやめた。

    ・Google Spreadsheetに取り込む
    →GAS製の有料、無料のツールがあった。
     GASで自作も考えたが、なんかめんどい感じだったので諦めた。

    ・別のツールにエクスポートデータを取り込み
    →そのツールを管理する手間がある。
     お手軽ではない。

  • pythonのコーディングは、標準コーディング規約のPEP8をベースにして、つくる。

    pythonのコーディングは、標準コーディング規約のPEP8をベースにして、つくる。

    https://pep8-ja.readthedocs.io/ja/latest/

    大して、長くなく、基本的なことだけなので、読みやすく、守りやすい。

    コーディング規約の「コメント」についての規約の部分に、「英語を書くときは、Strunk and White スタイルを使いましょう」 とある。知らなかったが、ストランクとホワイトによるコンパクトな英文の作成スタイルのことらしい。Kindleで格安で売っているので、読んでみてもいいかも(読めるかどうかは不明だが)。レビューによると、2章が胆のようだ。

    https://amzn.to/2WPfZ5x