Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Colaboratoryで分析コンペをするときのテクニック集

currypurin
March 03, 2021

 Colaboratoryで分析コンペをするときのテクニック集

2021.3.2の分析コンペ勉強会の発表資料です。

currypurin

March 03, 2021
Tweet

More Decks by currypurin

Other Decks in Science

Transcript

  1. 自己紹介 • こんなアイコンでTwitter・Kaggleしています • 去年の6月から、データサイエンティストとして働いています • 趣味:Kaggle、漫画、podcast、clubhouse • 今回、Cassavaコンペのsolutionを発表する予定でした •

    最終日、cvも改善し、これはいけるでしょう からの、Private872位という順位。 • 上位のsolutionをみても、多くのチームとは自チームとの違いが分 からず。。。1位と2位はとあるweightを使用。。。 • ということで、Cassavaコンペでも使ったColaboratoryの話をしま す。 2
  2. KaggleのCodeコンペの場合 Kaggle Datasets (Notebook Output Files) KaggleNotebook modelのweight 推論 &

    submitファイル作成 読み込み この環境は固定されている。 選べるのは、modelのweightの作 成(学習)をどこでするか。 環境 価格 GPU・TPUの使用制限 学習データの ダウンロード Kaggle Datasets へのアップ Kaggle notebook 無料 週30~40時間程度 自動 自動 クラウド・ オンプレ 有料 なし 手動 手動 Colaboratory 無料 Kaggleのnotebookより 緩やかな制限 手動 手動 この赤枠の課題を 克服できると、 Kaggleの notebookよりも便 利に使うことができ る 5
  3. Colaboratoryとは Colaboratory(略称: Colab)は、ブラウザから Python を記述、実 行できるサービスです。次の特長を備えています。 - 環境構築が不要 - GPU

    への無料アクセス - 簡単に共有 「Colaboratoryとは」より https://colab.research.google.com/notebooks/intro.ipynb?hl=ja 6
  4. Colaboratory テクニック集 1. テーマの設定(darkモード等)、エディタの設定(インデント幅等) 2. Kaggleのnotebook環境か、Colaboratory環境かを判別 3. notebook名を取得 4. Googledriveのファイルへのアクセスを許可

    5. 学習速度比較、Mydriveの使用、colaboratory vs Kaggle notebook vs GCP 6. kaggle apiを使用する a. データのダウンロード i. 速度比較 b. Kaggle Datasetsへのアップロード 7. weightのロード、速度比較 8. Githubのrepositoryをclone a. public repository b. private repository 9. Githubのipynbファイルを開く、Githubに保存 自分が使っているやり方を紹介します。更に良い方法があれば、是非教えてください! 11
  5. 2.ColaboratoryかKaggleNotebookか判別 使用例 import sys from pathlib import Path if 'google.colab'

    in sys.modules: # colab環境 INPUT = (‘/content/input/’) elif 'kaggle_web_client' in sys.modules: # kaggle環境 INPUT = Path(‘../input/’) • ColaboratoryかKaggleNotebookかにより、INPUTのディレクトリを変更 • これにより、同じコードのまま、どちらの環境でも動かすことが可能 15
  6. 3.Notebook名を取得 from requests import get name_notebook = get('http://172.28.0.2:9000/api/sessions').json()[0]['name'] # 変更しない場合、notebook名は’Untitled0.ipynb’

    • Notebook名を変更するだけで、学習した重みファイルの保存先のフォルダ名 に用いるようにするなど、便利に使える • Notebook名の変更は忘れにくいと思う ◦ Notebook名の変更を忘れなければ、学習した重みファイルを上書きしてしまうというミスを防 止できる 16
  7. 4.Google Driveのファイルへのアクセスを許可 • Google Driveへのファイルへのアクセスを許可することで、保存していたファイ ルの読み込み、ファイルの保存ができる • Google Driveのファイルの読み書きはやや遅い •

    課金すれば、Google Driveの容量を増やせる ここをクリック ポップアップの Googleドライブに接続をクリック from google.colab import drive drive.mount('/content/drive') #挿入されたこのコードを実行し、認証 または 接続完了 17
  8. 5.学習速度比較 MyDriveの使用 • Cassavaコンペの学習データ、21,397枚の学習速度 ◦ 画像データをMyDriveに置くか、content直下に置くかで速度を比較した。 環境 画像 gpu 1epochの学習時間

    colaboratory content直下 P100 410秒 colaboratory MyDrive P100 476秒 • 学習時間は、2epoch学習した時間の平均。画像サイズ384, batch_size20など同一条件で比較 • content直下(ローカル)に画像をおいた方が、やや速い • 長時間学習するときは、MyDriveにおかない方が良いかも • ただし、content直下は、セッションが切れる度にリセットされる • もう少し差があるかと思っていました。(以前はもっと差があったはず) content直下 MyDrive 19
  9. 5.Pytorchでの学習速度比較 • Cassavaコンペの学習データ、21,397枚の学習速度 環境 gpu 1epochの学習時間 kaggle notebook P100 540秒

    Colaboratory P100 410秒 GCP (highmem-8(vCPU x 8、メモリ 52 GB)) P100 395秒 GCP (highmem-8(vCPU x 8、メモリ 52 GB)) V100 168秒 • 学習時間は、2epoch学習した時間の平均、画像サイズ384, batch_size20など同一条件で比較 • gcpは、AI PlatformのPyTorch:1.7として提供されている環境を利用 • P100での速度は、GCP、Colaboratory、kaggle notebookの順であった。 • V100は速いので、ColabProの提供開始で使えるようになるのに期待。 20
  10. 1. 2.   6.Kaggle apiを使用する • /root/.kaggle に kaggle.jsonをアップする from google.colab

    import files files.upload() ここをクリックしてkaggle.jsonをアップ または # /root/.kaggleにkaggle.jsonを移動する !mkdir -p ~/.kaggle !mv kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json 22
  11. 6.b Kaggle Datasetsへのアップロード import json from kaggle.api.kaggle_api_extended import KaggleApi ID

    = ‘<自分のkaggleのID>’ DATASET_ID = ‘<datasetのid>’ UPLOAD_DIR = ‘<colaboratoryでのフォルダのパス>’ def dataset_create_new(): dataset_metadata = {} dataset_metadata['id'] = f'{ID}/{DATASET_ID}' dataset_metadata['licenses'] = [{'name': 'CC0-1.0'}] dataset_metadata['title'] = DATASET_ID with open(OUTPUT_DIR / 'dataset-metadata.json', 'w') as f: json.dump(dataset_metadata, f, indent=4) api = KaggleApi() api.authenticate() api.dataset_create_new(folder=UPLOAD_DIR, convert_to_csv=False, dir_mode='tar') • Kaggleデータセットを新規作成する場合 25
  12. 6.b Kaggle Datasetsへのアップロード VERSION_NOTES = ‘<version notes(前の版からの変更点)>’ def dataset_create_version(): api

    = KaggleApi() api.authenticate() api.dataset_create_version(folder=UPLOAD_DIR, version_notes=VERSION_NOTES, convert_to_csv=False, dir_mode='tar') • Kaggleデータセットを更新する場合 26
  13. 7.weightのロード • MyDriveからのロードと、content直下からのロード ロード時間 MyDrive 0.4秒 content 直下 0.3秒 #

    weight loadの例 model = timm.create_model('tf_efficientnet_b3_ns', pretrained=False) weight_path = ‘weightのpath’ model.load_state_dict(torch.load(weight_path)) • ほぼ変わらない結果となった。 • Cassavaコンペ期間中はMyDriveからだと数分かかることがあったので、その 場合はcontent直下にコピーしてロードすると解決した。 27
  14. 8.Githubのpublic repositoryをclone • Bringing data info the Google Colab environment

    に詳しく書かれている !git clone https://github.com/username/repository.git /content/foldername 複製元のリポジトリ colaboratoryでの複製先 • Public repositoryをcloneする場合 28
  15. 8.Githubのprivate repositoryをclone その2 # その2、SSH keyを使う方法 !ssh-keygen -t rsa -b

    4096 -C "[email protected]" !cat /root/.ssh/id_rsa.pub # これで表示されたkeyを、githubのsettings>deploy keysに登録 !ssh-keyscan github.com >> /root/.ssh/known_hosts !chmod 644 /root/.ssh/known_hosts !chmod 600 /root/.ssh/id_rsa !ssh -T [email protected] !git clone [email protected]:username/privaterepo.git /content/foldername SSH keyを作成し、公開鍵を githubに登録 githubをknown_host設定し、 接続確認。レポジトリを clone する /root/.ssh/は、セッションが切 れるとなくなってしまうので、 ローカルに保存したり、 Drive に保存するなどし、毎回 up or copyして使うと良いと思う Bringing data info the Google Colab environmentより 30
  16. 参照したウェブサイト • 公式 ◦ Colaboratory へようこそ ◦ 外部データ: ローカル ファイル、ドライブ、スプレッドシート、

    Cloud Storage ◦ Colab Pro ◦ Bringing data into the Google Colab environment • その他 ◦ colaboratoryでkaggleをするときに便利なコード ◦ GitHubでssh接続する手順~公開鍵・秘密鍵の生成から ~ - Qiita ◦ お前らのSSH Keysの作り方は間違っている - Qiita ◦ Google Colaboratoryの90分セッション切れ対策【自動接続】 - Qiita 33