日々精進

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

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

原因はTensorFlowとCUDAとcuDNNのバージョンが一致していないため。

tensorflow-gpu==1.15.3ではCUDA10.0とcuDNN7を使わないといけない。

DockerHubから以下のコンテナをpullして使うとエラーが出ず、GPUを使って学習出来た。 nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04

参考:

www.kkaneko.jp

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

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

以下の設定で使っていたが、disable_existing_loggersをtrueにするとgcログが出なくなった。ググってもdisable_existing_loggersについての情報が見当たらなかったので詳細は不明だがgcログを出す既存の設定を消してくれるのだろう。

hydra:
  run:
    dir: ./
  output_subdir: null
  job_logging:
    version: 1
    handlers:
      console:
        class: logging.StreamHandler
        stream: ext://sys.stdout
    root:
      handlers: [console]
    disable_existing_loggers: false

参考:

hydra.cc

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

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

以下を実行するとインストールできる。

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

ただ、conda env createで環境を作ろうとするとやっぱりエラーになるから、conda env createの後でpycocotoolsだけpip installを手動で実行しないといけないのが面倒。

参考:

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

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

なのでif is_win():のような分岐を書かなくてもパスはLinuxとWindows両対応できそう。これは嬉しい。

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

原因はProcessingStepのproperty_filesで指定されたpathにファイルが見付からないこと。それを示すエラーメッセージが全くでないのでかなり困った・・

stepのOutputタブには以下のメッセージが表示されるが、これじゃわからない・・

This step failed. For more information, view the logs

ClientError: Cannot access S3 key.

参考: docs.aws.amazon.com

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

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

代わりに ${VAR:-"unset"} == "unset" とするとエラーにならない。

参考:

www.baeldung.com