[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

古いバージョンのpytorch-lightningをインストールしようとして詰まったのでメモ【備忘録】

お疲れ様です。

業務内で古いバージョンのpytorch-lightningをインストールするときにエラー発生したので備忘録として残しておく。
原因としてはライブラリの問題ではなく、pipのバージョンが新しくなったことによるもののようです。
結論、pipをダウングレードしたらインストールできたという話なんですが…。
pytorch-lightningに限らずバージョンの古いライブラリをインストールする際に頭の片隅に置いておきたいです。

エラー内容

注目すべきは黄色で表示された警告の方です。
”*(アスタリスク)”が使えるのは"=="と"!="の演算子のみだという内容ですね。

WARNING: Ignoring version 1.6.0 of pytorch-lightning since it has invalid metadata:
Requested pytorch-lightning==1.6.0 from https://files.pythonhosted.org/packages/09/18/cee67f4849dea9a29b7af7cdf582246bcba9eaa73d9443e138a4172ec786/pytorch_lightning-1.6.0-py3-none-any.whl has invalid metadata: .* suffix can only be used with `==` or `!=` operators
    torch (>=1.8.*)
           ~~~~~~^
Please use pip<24.1 if you need to use this version.

実際pytorch-lightningの公式のGitHubを見るといろんなところでこの書き方がされているみたいです。 github.com

対処方法は上でも少し述べた通りpipのバージョンを下げることです。
v24.1以降で問題があるっぽいので、v23にでも下げましょう。

ダウングレード後、再度インストールでいけました。
同じように警告は出ます。内容としてはv24以降だと非推奨の書き方がされているよという内容。
とりあえずこちらとしてはインストールできればOKです。

DEPRECATION: pytorch-lightning 1.6.0 has a non-standard dependency specifier torch>=1.8.*. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of pytorch-lightning or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063

ライブラリ経由で事前学習済みモデルをダウンロードする際のフォルダ指定

お疲れ様です。

Pythonディープラーニングのプログラムを書く際、その際に様々なライブラリにお世話になるかと思います。
その中で、モデルアーキテクチャの定義と同時に特定の事前学習済みモデルの重みファイルを自動でダウンロードしてくれる機能があるライブラリもあります。
それらダウンロードされる事前学習済みモデルのダウンロード先フォルダをこちらで指定する方法を調べたのでこちらにも備忘録としておいておきます。

私はなんとなくプロジェクトごとに使ったモデルがわかるようにしたくて、プロジェクトフォルダの直下にダウンロードした重みファイル用のフォルダを作って管理しています。
GitHubのリモートリポジトリにはpushされないように.gitignoreで指定はしていますが…。


目次


ダウンロードフォルダを指定しない場合

Windowsの場合、ユーザフォルダ直下に「.cache」というフォルダが作成され、その中に保存されます。
これはpytorch系やhuggingfaceいずれの場合も同じです。

ダウンロードフォルダの指定

torchvision, torch.hub

環境変数"TORCH_HOME"か、torch.hub.set_dirに保存先フォルダのパスを指定することで可能です。 環境変数の場合はコンソールでsetコマンドを使って指定することも可能かと思います。

os.environ["TORCH_HOME"] = "weights"
torch.hub.set_dir("weights")

余談ですが、torchvisionで事前学習モデルをダウンロードする際の指定の仕方が最近のバージョンでは変更されているようです。(最近になって知りました…。)

from torchvision import models

models.resnet50(pretrained=True) # 非推奨(2024/8現在は実行すると警告が出る)

models.resnet50(weights=models.ResNet50_Weights.DEFAULT) # 推奨の指定方法


Huggingface

環境変数"HF_HOME"を指定します。環境変数なのでsetコマンドでも可能です。

os.environ["HF_HOME"] = "weights"

こちらの場合少し注意が必要で、huggingfaceのライブラリ(transformers等)をimportする前にあらかじめ指定しておかないと反映されません。

import os
os.environ["HF_HOME"] = "weights" # 先に事前学習モデルの保存先を指定

from transformers import DetrConfig, DetrForObjectDetection

model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")


timm

ダウンロード先がPytorch系の場合とHuggingfaceの場合の2パターンがあるので、利用したいモデルに合わせて上記の方法をお試しください。
(最近だとHuggingfaceからのダウンロードが多いのかな…。)

Pythonで三目並べ対戦GUIを作ってみた

お疲れ様です。

「三目並べ」、いわゆる「〇×ゲーム」の対戦GUIPythonで作ったので簡単に紹介します。

GUIのイメージ

背景

元々は会社の技術系の勉強会で三目並べのAIを作ったことが始まりです。
教化学習の手法の1つであるQ学習を適用して作成したAIとMiniMax法を使ったルールベースの方法の両方を作成していました。
Q学習の方は下記のサイトのソースコードを使用しました。
Q学習の仕組みについても下記のサイトは非常に参考になりました。
qiita.com なお、MiniMax法に関してはChatGPTに元となるソースコードを作ってもらったので参考サイトはありません。

作成

それぞれ作ってみて実際にAI同士の対戦やAIと人間の対戦をしてみたい!ということで作成したQ学習とMiniMax法を組み込んだ対戦GUIを個人的に作成しました。
GUIの作成には、業務でよく使用するwxPtrhonを使用しました。

ソースコード

作成したコードは以下になります↓
勉強会で作成した学習や評価用のスクリプトも一緒に格納しています。
github.com

GUIのイメージ(初期)
上部のラジオボタンで各プレイヤー(〇、×)の対戦エージェントを指定し、開始でゲームを開始します。
Q学習AI、MiniMax法の他、ランダムで入力するエージェントと人手での入力を選択可能です。
人間が操作する場合は、盤面の区画をクリックすることでその部分に"〇"or"×"が入力されます。

所感

それぞれの対戦エージェントで試してみた感想ですが、やはりMiniMax法最強ですね…笑
というか、実装がすべての状態を総当たりで見てるので弱いはずがないんですが。

Q学習に関しては、100万回学習でもまだ人間が勝てる程度の強さにしかなりませんでした。
パラメータを調整したり学習回数を増やしたりしてもそれほど変化が無かったので、これくらいが限界なのか…。
この辺は機会があれば改良なんかもしてみたいです。

opencv-pythonの日本語の扱いについてメモ

お疲れ様です。

 

PythonOpenCVを使った画像処理のプログラムを書くことが多いのですが、日本語が絡んでくるとうまく動作しないことがよくあります。

その対処法をメモ的に残しておきます。

 

画像読み込み・保存(imread, imwrite)

cv2.imreadで画像を読み込むときやcv2.imwriteで画像を保存するときに、入力したパスに日本語が含まれていると読み込みor保存が正常にできない問題。

対処法は以下の通り。

‐ 画像読み込み

  • PillowのImage.openで読み込み、numpy.ndarrayに変換
  • numpy.fromfilecv2.imdecodeを使用して読み込み

- 画像保存

  • numpy.ndarrayからPillow形式に変換し、Image.saveで保存
  • cv2.imencodeとnumpyのtofileを使用して保存

【参考】

imagingsolution.net

 

文字列書き込み(puttext)

cv2ではputtextを使って画像内に文字を書き込むことができますが、これは英数字のみで日本語を書き込もうとすると文字化けします…。

対処法は以下の通り。

  1. 一度Pillow形式に変換
  2. ImageDrawDrawクラスのインスタンスを作成
  3. textメソッドを使用して文字列書き込み
  4. numpy.ndarrayに戻す

フォントもインストールされているもので日本語対応していれば変更可能です。

Windowsであれば"C:\Windows\Fonts"に格納されているかと思います。

ImageFont.truetypeでフォントのttcファイルとフォントサイズを設定して指定します。

Windowsのフォント格納場所

 

【参考】

monomonotech.jp

 

ウィンドウ表示(namedwindow, imshow)

ウィンドウを開いて画像を表示する機能ですが、ウィンドウタイトルを日本語で書くと文字化けしてしまいます。

OpenCV

調べた限りではcv2の設定で対処する方法はなさそうです。

ウィンドウタイトルのみの問題で画像に関しては普通に表示されるので、使用上は全く問題はないですが…。

どうしても必要という場合はPythonGUIライブラリでウィンドウ表示すればなんとかなります。ただ、クリックイベントなどcv2にある機能はGUIライブラリのイベントを使って個別に作成する必要があるのでそちらも勉強する必要がでてきます。

tkinter」と「wxPython」で作成してみたのでどうしても必要な場合はご参考ください。

コードはこちらを参照↓

github.com

【使用例】

tkinter

wxPython

tkinterのほうはPythonの標準ライブラリなので別でインストールする必要がないのでやるならこちらでしょうか…。

私個人としては、wxPythonに慣れているのでこちらのほうが作りやすいです。

 

 

G検定合格したので勉強に使用したサイトをまとめてみた

お疲れ様です。

少し前になりますが3月のG検定(2024#2)を受験し、合格しました。
勉強期間としては1か月程度。といっても普段の業務の関係である程度AI周りの知識はあります。

今回、テキストは買わずネット上の情報と模擬問題のみで勉強していました。 流れとしては、以下ような感じ。

模擬問題を解く(自宅)
 ↓
間違った問題、問題文中でわからない箇所をメモ(自宅)
 ↓
メモをとったところを調べる(通勤時間などの空き時間)
 ↓
模擬問題を解く
 ↓
(以下ループ)

勉強に使用したサイトをまとめておきますので、受験勉強の参考にどうぞ。

  • G検定の例題・過去問
    G検定公式の例題と過去問。どんな感じのテストかつかむのにおすすめ。
    解答のみで解説がありませんが、別の有志のサイトで解説されているのは結構ある。
    こちらは、勉強の開始時に感覚をつかむために解いたのと試験の直前にもう一度確認のために解いた感じでした。
    実際試験直前くらいになると初期に解いた問題を忘れていたので良い感じに確認になったと思っています。
    www.jdla.org

  • G検定(AI・機械学習)用語集
    2021年のものにはなりますが、シラバスに対応したキーワードをまとめてくれているサイト。
    キーワードごとに確認テストがあるが、これは説明を読んでいれば簡単に解けるレベルの問題でした。
    キーワードも基本的には概要をまとめた程度なので詳しい内容は別途調べる必要があるかも。
    zero2one.jp

  • ディープロ
    IT関係の資格の模擬テストができるサイト。無料で登録ができる。
    G検定の模擬テストでは、ランダムに出題される問題を実際の試験時間と同じ2時間で解く形になる。
    問題の難易度は低めで、ランダム出題のため回が変わると同じ問題が出題されることもありました。反復学習にはなりますね。
    私が利用していた際は、普段の勉強で2時間は長いと感じたので1時間で区切って回答確認するようにしていました。
    G検定は時間との勝負なところもあるので1時間で解けた問題数を増やしていくのを意識するといいかもしれないです。
    diver.diveintocode.jp

  • G検定 Web模試
    テキストを購入した人向けのサイトではありますが、1日1回10問の模擬問題を解くことができます。
    AIの歴史から最新技術まで幅広い問題がありましたが、同じ問題もちょこちょこ出る感じでした。
    無料分は解説が無いので自分で調べる必要はありますが…。
    10問のみでサクッと解けるので私は通勤の電車の中でよく利用していました。
    deeplearning.sakura.ne.jp

  • Study-AI
    メールアドレスの登録が必要で、送られてくるメールに記載のURLから模擬テストを受けられる。基本無料。
    こちらも試験時間2時間の中で回答する形式になっています。ちょっとうろ覚えですが解説もあったと思います。
    私はこちらを試験直前の最後の確認のつもりで最後までとっておいた模擬テストでした。
    そこそこ難易度が高くて思ったより点が伸びず直前にめちゃ焦った記憶があります…笑
    study-ai.com

  • AVILEN
    模擬問題が20問掲載されています。解答を受け取るためには登録が必要になる。
    問題の難易度としてはかなり高いですが、質はかなり良いと思っています。
    avilen.co.jp

  • G検定・E資格ナビ
    解説付きの公式例題とオリジナルの模擬問題が掲載されています。
    模擬問題は更新が止まっているのか、ページがないものも多いです…。
    難易度はそこそこって感じだったので勉強の初期に解くのがいいかも。
    qe.hpeo.jp

  • つくもちブログ 〜Python&AIまとめ〜
    AIの情報がまとめられたブログ。G検定をはじめ資格の対策記事もある。
    練習問題もありますが、難易度高めなのと解説が分かりにくいです…。
    AI周りの情報収集にはよいと思います。
    tt-tsukumochi.com

  • G検定問題集(ひたすら過去問ふぅ問題で鍛錬する所 一問一答 仮)
    一問一答でひたすら問題を解くことができる有志のサイト。
    問題の内容も幅広く難易度もそこそこでした。幅広いがゆえに実際に必要な知識なのか判断が難しかったり…。
    通勤等の移動時間にたまに利用していた程度。
    www.simulationroom999.com

  • G検定対策問題集【改訂版2024対応】
    基本的には有料の会員向けですが、例題が少しだけ無料で公開されているのでちょっと解いてみるのはありかも。 note.com

Pytorchのエラー「PyTorch: RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED」

お疲れ様です。

 

Pytorch使用時に発生したエラーの対処についての備忘録です。

基本的には調べたサイトや記事をまとめただけになります。

 

  • エラー文

PyTorch: RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED

 

公式GitHubのissueでも議論されている内容ですね。

github.com

github.com

 

  • 対処方法

1.

下記のコードを記載する。


import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
os.environ["WORLD_SIZE"] = "1"
import torch
  

pytorchをimportする前にosモジュールで環境変数
"CUDA_VISIBLE_DEVICES"と"WORLD_SIZE"を指定するように書く。

私の場合はこれでエラーは解消しました。

 

2.

1の方法で解消しない場合もあるようで、その場合の代替案みたいなものが以下のサイトにあります。

Pytorch自体のバグなので、ライブラリのソースから書き換えてしまおうという感じですね。(個人的にはあまりやりたくはないですが…。)

stackoverflow.com

 

3.

そもそもPytorchのバージョンを変えてしまえば解消することがほとんどではないでしょうか。

基本的に最近(2024年7月あたり)のバージョンで起こることが多いみたいです。

私の場合もPytorch2.3.0を使用している際に起こりました。ただ、いつも使っているそれ以外のバージョンのPytorchでは一度も起こったことがないんですよね…。

今回の場合はバージョンを変えられない状況での開発だったので1の方法になりました。

 

  • 補足

最後に今回エラーが発生した環境を簡単に記載しておきます。

ちなみに後からWindows環境で同じライブラリバージョンをインストールして試してみたものの、エラーの再現はできませんでした。

(何か足りないものがあるかもですが…。)

OS: Linux

Pytorch: 2.3.0

CUDA: 12.1