日々精進

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

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…

multiprocessing.Poolで並列処理をすると、子プロセスで例外が発生した場合エラーメッセージがでない

IT

multiprocessing.Poolでも、apply_asyncを使って子プロセスを起動している場合は子プロセスで発生した例外を親プロセスに伝えられる。詳細は以下参照。 conta.hatenablog.com 自分はmapを使っていたので同様のことができず困った。しかも、子プロセスで例外…

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

AI

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

concurrent.futuresで並列処理をすると、親プロセス終了時に「Error in atexit._run_exitfuncs OSError: handle is closed」エラー

IT

原因は以下。 子プロセスを管理しているオブジェクトはfull gcが実行されるまで生きている 親プロセスが終了すると子プロセスを管理しているオブジェクトは子プロセスに停止命令を送る その時には子プロセスはすでに終了しているので「handle is closed」が…

yieldと通常のreturnは併用できない

IT

同じ関数の中で、ifで分岐してこの場合はgeneratorとして使う、この場合は普通に値を返す、ということはできないらしい。 ja.stackoverflow.com しょうがないのでgeneratorがほしい場合とそうでない場合で共通の部分を関数に抽出して残りの部分をそれぞれ別…

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

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をクリ…

aws cliでS3からファイルをダウンロードする時、沢山あるファイルをzipにまとめるとダウンロードが30倍速くなった

IT

約15000ファイルの画像データセットを、普通にダウンロードした場合とzipに固めたものをダウンロードした場合でどの程度速度差があるのか計測してみた。 EC2インスタンスはg4dn.2xlarge。 普通にダウンロードした場合:300秒 zipに固めてからダウンロードし…

boto3でS3からファイルをダウンロード・アップロードするのを高速化する

IT

boto3のS3.Client.download_fileメソッドを使って大量のファイルをダウンロードすると、aws cliでダウンロードするよりかなり遅い。 boto3.amazonaws.com 理由はdownload_fileは同期処理なのに対してaws cliはマルチスレッド(ちゃんと調べてないのでマルチ…

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…

shell scriptで環境変数が未定義かどうかを判定する

IT

-z "${VAR}" とするのがメジャーだが、これでチェックするとset -euxo pipefailを設定して未定義変数を使用している場合、エラーになるようにしているとエラーで止まってしまう。 代わりに ${VAR:-"unset"} == "unset" とするとエラーにならない。 参考: ww…

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

AI

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

Cmderが重すぎるのでConEmuに乗り換えしました

IT

タイトル通りだが、Cmderが重すぎてイライラするのでConEmuに乗り換えたら非常に快適になりました。 有料でいいから軽くて使い勝手のいいターミナルエミュレータがほしい。。

OpenSSH 8.8で、Ctrl+Cを押すと接続が切れる

IT

git for windows 2.35に付属しているOpenSSH 8.8を使ってsshでサーバにログインしたところ、Ctrl+Cを押すとssh接続が切断されてしまう。期待する動作は、サーバで実行中のプロセスにSIGINTを送ること。 git for windows 2.28.0に付属しているOpenSSH 8.3だと…

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…

Jetbrains製IDEでuntrusted server certificateをacceptするか何度も聞かれる問題

IT

設定で自動的にAcceptするようにできる。セキュリティ的にはよろしくないと思うけど・・やり方は以下参照。 android - Untrusted Server Certificate in Intellij - Stack Overflow

Cmderでタブ毎にhistoryを分ける

IT

cmderフォルダ\config\clink_settings の history.shared = True をFalseにすると分けられる。 参考: github.com