>

2018年4月24日火曜日

Google Cloud Storage(GCS)に大量のファイルをアップロードする方法

機械学習に使うデータセットとか大量のデータをGCSにアップロードする場合はちゃんとした方法でアップロードしないと遅すぎて1月経っても終わらなかったりする。

GCSのドキュメント( https://cloud.google.com/storage/docs/object-basics?hl=ja )には
アップロード方法としてコンソール, GSUTIL, コードサンプル, REST APIの4通りの方法が記載されているがこのうちコンソール, GSUTIL, コードサンプル(python)について試して速度を見てみた。
その結果
コードサンプル(python) >> GSUTIL > コンソール
でした。
アップロードするならコードサンプル(python)がおススメです。

なお、pythonの場合コードサンプルは
def upload_blob(bucket_name, source_file_name, destination_blob_name):
    """Uploads a file to the bucket."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)
    blob.upload_from_filename(source_file_name)
    print('File {} uploaded to {}.'.format(
        source_file_name,
        destination_blob_name))

となっているが注意する点は

  • from google.cloud import storage をすること。
  • コードサンプル中のbucket_nameには"gs://mybucket"の場合は"mybucket"を設定すること。
  • コードサンプル中のdestination_blob_nameには"gs://mybucket/floder1/myfile.jpg"の場合は"floder1/myfile.jpg"を設定すること。


2018年4月4日水曜日

CentOS 7 64bit にOpenCVをインストールする。

基本 https://qiita.com/estaro/items/c2f8f790dc62a9f5965f に従ってOpenCVをインストールしたが
自分の環境だとlibopencv_core.so.3.4.1のlinkの時にDSO missingとかundefined reference to symbolとか言われて困った。

結局cmakeコマンドに引数でコンパイラを指定していたのだがそこにg++を指定すべきだったのがgccをしていたのが原因だった。LinuxでC言語系開発した経験がなかったのが遠因。
(もう一つの原因は自分でgccの7.3をソースからビルドして/usr/localの下にinstallしてしまったのが事。これがデフォルトになってしまうと現状では結構文句言われてしまいかなり後悔している。)

誤:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/gcc ..

正:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ ..

ソース
https://github.com/opencv/opencv/issues/5435