機械音痴な情報系

エラーの解決方法とTips

【エラー】google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application

エラー

$ docker-compose up <SEVICE_NAME>
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started

解決方法

$ gcloud auth application-default login

Credentials saved to file: [/Users/saneatsuwakana/.config/gcloud/application_default_credentials.json]

後は、作成されたjsonファイルをGOOGLE_APPLICATION_CREDENTIALSに指定して読み込ませればOK。

dockerの場合は以下のように「docker-compose.yml」に記述する。

app_name:
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS=application_default_credentials.json

その他

以下のエラーが出た場合...

ERROR - 403 POST https://translation.googleapis.com/language/translate/v2/detect: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the translate.googleapis.com. We recommend that most server applications use service accounts instead. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.

公式サイトを参考に以下のコマンドでjsonファイルを作成する

$ gcloud iam service-accounts create <NAME>
$ gcloud projects add-iam-policy-binding <PROJECT_ID> --member "serviceAccount:<NAME>@<PROJECT_ID>.iam.gserviceaccount.com" --role "roles/owner"
$ gcloud iam service-accounts keys create <FILENAME>.json --iam-account <NAME>@<PROJECT_ID>.iam.gserviceaccount.com

Getting Started with Authentication  |  Authentication  |  Google Cloud

【MySQL】ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'

エラー内容

mysqlにログインし、READMEに沿ってデータベースを作成する際に以下のエラーが発生した。

mysql> create database sns_manager default character set utf8mb4 collate utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'

原因

これは、DB作成時のcharasetをutf8mb4と、mb4系の設定を行っているにもかかわらず、utf8_general_ciを指定していているために発生するらしい。

解決方法

CHARACTER SETが'utf8mb4'で作業したい場合ので、COLLATIONにutf8mb4_general_ciを指定してあげれば良い。

mysql> create database sns_manager default character set utf8mb4 collate utf8mb4_general_ci;
Query OK, 1 row affected (0.07 sec

参考

【Docker】ERROR: unauthorized: authentication required

環境

  • Mac: Mojave 10.Mojave 10.14.1
  • Doker: 18.09.0

エラー内容

あるプロジェクトをcloneしてきて以下のコマンドを打ったところでエラー発生。

$ docker-compose run init
Creating network "docker_default" with the default driver
Pulling db (mysql:5.7)...
ERROR: unauthorized: authentication required

解決方法

$ docker logout 
Removing login credentials for https://index.docker.io/v1/

$ docker-compose run init
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
a5a792f73cd8: Pull complete
936316019e67: Pull complete

参考

github.com

【Kerasエラー】Your generator is NOT thread-safe.Keras requires a thread-safe generator when`use_multiprocessing=False, workers > 1`.For more information see issue #1638.

環境

  • Ubuntu: 16.04
  • Python: 3.6
  • Tensorflow: 1.9.0
  • Keras: 2.2.0
  • NVIDIA Driver: 410.72
  • CUDA: 10.0

エラー内容

GCPで学習していたら、他のサーバでは出なかったエラーに遭遇した。
Epoch1の重みを保存した後にEpoch2〜38に以下のエラーが一気に出力され、Epoch39からはまた普通に学習し始めた。

Epoch 38/38
Your generator is NOT thread-safe.Keras requires a thread-safe generator when`use_multiprocessing=False, workers > 1`.For more information see issue #1638.

解決方法

fit_generatorの引数にuse_multiprocessing=Trueを追加して解決。

self.model.fit_generator(
                    generator,
                    epochs=self.current_epoch+1,
                    initial_epoch=self.current_epoch,
                    use_multiprocessing=True, # Add here
                    *args, **kwargs
                )

詳しくは以下サイトで。

tech.wonderpla.net

参考

【GCP】ssh_exchange_identification: read: Connection reset by peer

環境

  • クライアント:Mac OS Mojave 10.14.1
  • サーバー:Ubuntu 16.04

エラー

今までは以下のコマンドでGCPに入れたのに、何故か突然エラーを吐き出すようになった。

$ gcloud compute --project "<PROJECT_NAME>" ssh --zone "<REGION_NAME>" "<VM_NAME>" 
ssh_exchange_identification: read: Connection reset by peer
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

原因、解決方法

どうやらサーバー側でアクセスが許可されていなかったことが原因らしいが、なぜ突然アクセス出来なくなったのか…??

$ sudo chmod 777 /etc/hosts.allow
$ vi /etc/hosts.allow # CentOSの場合は/var/log/secure

sshd: ALL # これを追加

エラー「ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory」

問題点

$ python
>>> import tensorflow as tf
Traceback (most recent call last):
  File "/home/saneatsu_wakana/PConv-Keras/venv/lib/python3.5/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "/home/saneatsu_wakana/PConv-Keras/venv/lib/python3.5/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "/home/saneatsu_wakana/PConv-Keras/venv/lib/python3.5/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "/usr/lib/python3.5/imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "/usr/lib/python3.5/imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

原因、解決策

どうやらCUDAやtensorflowのバージョンの関係で起こる問題のようだ。

CUDAのVersion: 10.0、tensorflow==1.8.0 だと問題が起こる。

$ pip uninstall tensorflow
$ pip install tensorflow==1.9.0

$ python3 -c 'import tensorflow as tf; print(tf.__version__)'
1.9.0

バージョンが出るということはimport出来ているということなので無事解決。

他の解決方法としてはCUDA側のバージョンを操作する方法もある。 qiita.com

Seleniumでスクレイピングするときに「is not clickable at point (772, 590). Other element would receive the click:」的なものが出る問題

エラー発生

Seleniumスクレイピングをする際にheadlessのオプションを追加すると以下のようなエラーが出てくる。

product_src_url_and_img_url_hash[:src_url]: https://~~. Error: unknown error: Element <a href="#" id="ms_001" style="outline:none;" title="...(M)">36</a> is not clickable at point (772, 590). Other element would receive the click: <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" dir="ltr" xmlns:fb="http://ogp.me/ns/fb#" class="mac chrome chrome7 webkit webkit5">...</html>
  (Session info: headless chrome=70.0.3538.77)
  (Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.14.0 x86_64).

解決策

結論から言うとウインドウのサイズを指定するオプションを追加すれば良い。

ぐぐってるうちに以下のサイトに遭遇。

tech.medpeer.co.jp

headless chromeは、poltergeistと比べて「ブラウザ上で見える要素であるか否か」にシビアなようです。例えば、position: fixed; left: 1000px としているDOM要素があるとします。このとき、ブラウザのウィンドウサイズが(800, 600)のように小さく要素が画面外になる場合は、その要素は見えないという扱いになります。

ん?単純に見えないならウインドウのサイズを指定してあげたらいいんじゃないか?と思い、以下のようにしてみたら無事解決されました。

  def selenium_and_capybara_config
    options = Selenium::WebDriver::Chrome::Options.new
    options.add_argument('--headless')
    options.add_argument('--window-size=1080,1080') # ここを追加する

    Capybara.configure do |capybara_config|
      capybara_config.default_driver = :selenium
      capybara_config.default_max_wait_time = 10
    end

    Capybara.register_driver :selenium do |app|
      Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
    end

    # 今まではoptionsを付けてスクレイピングすると上記エラーが発生していた
    # Selenium::WebDriver.for :chrome 

    Selenium::WebDriver.for :chrome, options: options
  end

無事ブラウザが表示されずにスクレイピングを行うことが出来た。

因みに、 --window-size=800,800 にしてみたところ同じエラーが発生した。
ある程度の大きさが無いとダメっぽい。