日々精進

新しく学んだことを書き留めていきます

AI

Pandasで読み込むカラムを絞るのと、データ型の最適化で処理が速くなった

AI

DataFrameの処理を高速化する時に、以下を行うと100倍ぐらい速くなった。パフォーマンスチューニングの時はまずこれらをやるといいかも。 pd.read_csvで読み込む時に必要なカラムだけ読み込む さらにdtypeも指定してメモリ使用量を削減する 参考: qiita.com

tensorflowでEstimatorを使って学習する時はtf.set_random_seedを自分で呼んではいけない

AI

注意:tensorflow 1.15.2で確認したので最新版では以下の話は違うかも知れません すべてのradom seedを固定する関数を作ってそれを呼ぶようにしていたが、学習の再現性がなく困っていた。 Estimatorのコードを読んでみると、なんとEstimatorの中に以下のコー…

dpkg -i cuda-keyring_1.0-1_all.debの後でapt updateを実行すると「E: Conflicting values set for option Signed-By regarding source」エラー

AI

nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04をベースにDockerImageをビルドしようとしたら、エラーが出たので以下を参考に直そうとしたら今度は掲題のエラーが発生。 www.nemotos.net 掲題のエラーメッセージの全文は以下。 E: Conflicting values set for o…

Object Detection APIの学習はeval_config.num_visualizationsを0にすると速くなる

AI

タイトル通りで、この対応を入れると学習時間が15時間→5時間になった。 github.com 何も考えずバリデーションデータ数と同じ値にしていたのがまずかった。。

同じ条件で前処理を実行してもアノテーションの順序が変わってしまう問題

AI

原因は前処理の一部に実行の度に結果が変わってしまう部分があったため。random seedは固定していたがそれでもだめなところがあった。 それは、以下のようにglobでファイルを取得している箇所。 for p in Path("/path/to").glob("*"): ... Dockerコンテナにs…

SageMakerでトレーニングジョブが「AlgorithmError: , exit code: 137」「InternalServerError: We encountered an internal error. Please try again.」エラー

AI

exit code 137の場合、OOMが原因という情報があった。詳細は以下参照。 goody-jp.com 137はSIGKILLによってプロセスがKILLされたことを意味するので、OOM以外が原因の場合もあるが、今回はほぼ同じコードで学習データのみ変更してこのエラーが出たのでOOMが…

DataFrameにSeriesをappendするとintがfloatになる

AI

df = DataFrame() df = df.append(Series({"a": 1})) のような感じでappendすると、Seriesのa列はint型なのに、append後のdfのa列はfloat型になっている。。 以下によると、DataFrameインスタンスを生成する時に、列を定義してそのdtypeをintにすればいいら…

SageMakerで使う、ml.~系インスタンスタイプの上限緩和申請の出し方

AI

mlインスタンスタイプの上限緩和申請は他のサービスクォータの上限緩和申請とやり方が違っていてめんどくさい。。手順は以下。 サポートダッシュボードを表示 https://us-east-1.console.aws.amazon.com/support/home?region=us-east-1#/ Create Caseをクリ…

PyCharmが重い問題

AI

いつもPyCharmを複数起動しているせいか、非常に重くてイライラしていたが、軽くする方法を見つけたのでメモ。 設定の「Upload changed files automatically to the default server」をAlwaysからNeverに変更するとかなり軽くなった。 手動でファイルをアッ…

TensorFlowで学習実行すると「Could not load dynamic library 'libcudart.so.10.0'」エラー

AI

原因はTensorFlowとCUDAとcuDNNのバージョンが一致していないため。 tensorflow-gpu==1.15.3ではCUDA10.0とcuDNN7を使わないといけない。 DockerHubから以下のコンテナをpullして使うとエラーが出ず、GPUを使って学習出来た。 nvidia/cuda:10.0-cudnn7-devel…

hydraを使うとgcログが出るようになってしまい鬱陶しい

AI

Facebook製のライブラリのhydraを使ってconfigファイルを読み込んでいたところ、gcログが標準出力に出るようになってしまい鬱陶しかった。 以下の設定で使っていたが、disable_existing_loggersをtrueにするとgcログが出なくなった。ググってもdisable_exist…

Windows環境でpip install pycocotoolsを実行すると「cl : コマンド ライン error D8021 : 数値型引数 '/Wno-cpp' は無効です。」エラー

AI

どうもコンパイラに渡すオプションが間違っているっぽい。恐らくpycocotoolsのインストール時にコンパイルを実行するが、そのコンパイラがpycocotoolsの作者の環境とユーザの環境で違うのが原因だろう。 以下を実行するとインストールできる。 pip install g…

Pythonでパスを"/opt"のように/始まりにして、windows環境でファイルを読み込むとC:/optのファイルが読み込まれる

AI

LinuxとWindow両方に対応する場合、パスの違いが問題になるが、Pythonだと掲題の通り自動的にCドライブのrootからパスをたどってくれるっぽい。(ドライブをどんな仕様で決めているかは不明なので、Dドライブで実行したらDドライブのrootからになるかも?) …

SageMaker ExperimentsでTracker.log_parametersを実行すると「{ClientError}An error occurred (SerializationException) when calling the UpdateTrialComponent operation: 」エラー

AI

原因はlog_parametersに渡したパラメータの値にnanがあったこと。nanをNoneに変換して回避した。

SageMaker PipelinesでProcessingStepが正しく完了しているはずなのにPipelineの実行結果がFailedになる

AI

原因はProcessingStepのproperty_filesで指定されたpathにファイルが見付からないこと。それを示すエラーメッセージが全くでないのでかなり困った・・ stepのOutputタブには以下のメッセージが表示されるが、これじゃわからない・・ This step failed. For m…

TensorFlowのSerializeToStringは同じ重みファイルをインプットにしても毎回異なる文字列を生成する

AI

TensorFlow1.15で確認したが、tf.GraphDef.SerializeToStringは同じ重みファイルをインプットにしても毎回異なる文字列を生成する。 違いはフォーマット的なものであり、読み込んだら同じデータになるのだが、SerializeToString後の文字列をファイルに保存し…

PyCharmでSSH Interperterの設定をしていると「Can't get remote credentials for deployment server」エラー

AI

原因は、ssh configurationsで設定したsshの接続設定があるプロジェクトでしか利用できない設定になっていて、PyCharmで開いているプロジェクトでは利用できないため。 以下を参考にVisible only for this projectのチェックを外すと直る。 stackoverflow.com

PyCharmからOpenVINOをimportすると「ImportError: /opt/conda/envs/myenv/lib/python3.7/site-packages/openvino/inference_engine/ie_api.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN15InferenceEngine10IExtension9getOpSetsEv」エラー

AI

.soファイル:soはshared objectの略。動的にリンクされる共有ライブラリ・バイナリファイル undefined symbolの原因:soファイルから参照している関数が見つからない(=関数が実装されているsoファイルが見つからない)こと undefined symbol: の後の_ZN15…

PyCharmでdebug実行時に.bashrcが実行されない

AI

PyCharmでSSH Interpreterを使っている場合。 .bashrcで定義している環境変数がないと動かないプログラムをPyCharmからデバッグ実行すると、.bashrcが実行されないのでエラーになる。 JetBrainsのサポートサイトには、以下の.shファイルを作ってSSH Interpre…

mmdetectionで推論すると「mmcv RuntimeError: nms_impl: implementation for device cuda:0 not found.」エラー

AI

現象は以下。 Dockerfileでmim install mmdetを実行して作ったコンテナで推論を実行すると発生する docker buildのログを見ていると、mmcvのcpu版がインストールされている。でも実行環境ではgpu版を使おうとしてエラーになっているっぽい 手動でmim install…

pip install の-fオプションをconda env createで環境構築する時に使う方法

AI

以下のように- pip:の次の行にオプションを書けばいい。 - pip: - --find-links https://download.pytorch.org/whl/cu113/torch_stable.html 参考: stackoverflow.com

dlibインストール時に「CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage」エラー

AI

原因はgcc,g++がインストールされていないため。Visual Studio 2022 Community版をインストールすると直った。

画像分類・物体検出において、背景を物体と認識してしまう問題

AI

画像分類・物体検出のアノテーションは矩形の枠とラベル(人・犬など)で付ける。 なので、人のアノテーションにはどうしても人の後ろの壁など人以外の部分も含まれてしまう。 そうすると、その壁などもモデルは人の一部であると見なして学習してしまう。 そ…

Deep Learningでは基本乱数は完全には固定できない(なので全く同じモデルは作ることが難しい)

AI

乱数のseedを固定すれば同じInputに対して、同じ推論結果を返す重みファイルが生成できるはず・・と思っていたが、そうではないらしい。 乱数の固定の仕方は以下参照。 qiita.com これを設定しても、cuDNNの中の乱数は固定できないらしい。TensorFlowではこ…

conda create, removeを繰り返すと.conda_trashファイルが増えていく問題

AI

現象は以下。 conda create, conda removeでconda環境の作成・削除を繰り返すとpip3.exe.conda_trash, pip3.exe.conda_trash.conda_trash, ...のように.conda_trashがconda createを実行した回数だけ繰り返すファイルができる これによって超長いファイル名…

PyCharmでSSH Interpreterを使っている時に、リモートホスト上でターミナルからinstallしたpackageをPyCharmにダウンロードさせる方法

AI

sshでリモートホストにログインし、pip installでpackageをinstallした後、ライブラリの更新操作をPyCharm上でやるとダウンロードしてくれる。今までInvalidate Cache&Restartを実行して全部のライブラリをダウンロードし直してた。。 やり方は以下参照。 tk…

Pythonで複数の環境で共有したい、けどpipなどのpackageにするほどでもないコードの共有

AI

「複数の環境」と言っているのは、例えば機械学習で言うと前処理、学習、精度検証のようなイメージ。 そういう環境で、ある程度実装も実行環境も分かれているけど一部の実装を共有したい場合どうするか。 pip packageにすると修正したらアップロードとインス…

tfliteで推論すると「RuntimeError: There is at least 1 reference to internal data」エラー

AI

原因はわかっていないが、再実行したらエラーが出なかった。なぜだ・・

multiprocessing.Poolは各ProcessにGlobal変数をコピーする

AI

マルチプロセスなので当たり前なんだけど、Pythonのmultiprocessing.Poolを使って複数プロセスで並列処理をする時にGlobal変数はそれぞれのプロセスにコピーされる。 なので、以下の例だとmy_funcの中でGlobal変数を変更しても他のプロセスには影響しない。 …

Pythonでオブジェクト==で比較すると「{ValueError}The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()」エラー

AI

発生条件は以下。 @dataclassの付いたclassのオブジェクトを==で比較する そのclassのインスタンス変数にnumpy.ndarrayがある 原因は以下。 @dataclassで自動生成されるeqメソッドは、そのクラスのフィールドからなるタプルを比較する 参考: docs.python.or…