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

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

0a872bb59e21d2c62d20d094f140429c?s=47 currypurin
March 03, 2021

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

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

0a872bb59e21d2c62d20d094f140429c?s=128

currypurin

March 03, 2021
Tweet

Transcript

  1. Colaboratoryで分析コンペ をする時のテクニック集 2021.3.2 分析コンペ勉強会 @currypurin

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

    最終日、cvも改善し、これはいけるでしょう からの、Private872位という順位。 • 上位のsolutionをみても、多くのチームとは自チームとの違いが分 からず。。。1位と2位はとあるweightを使用。。。 • ということで、Cassavaコンペでも使ったColaboratoryの話をしま す。 2
  3. 今日の発表内容 • Colaboratoryの概要、Colaboratoryを使って目指すところ • Colaboratoryのテクニック集 3

  4. Colaboratoryの概要 colaboratoryを使って目指すところ 4

  5. 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
  6. Colaboratoryとは Colaboratory(略称: Colab)は、ブラウザから Python を記述、実 行できるサービスです。次の特長を備えています。 - 環境構築が不要 - GPU

    への無料アクセス - 簡単に共有 「Colaboratoryとは」より https://colab.research.google.com/notebooks/intro.ipynb?hl=ja 6
  7. Colaboratoryとは • 使用中に次のようなポップアップが出るなど、長時間の学習には向いていない。 • 1セッション最大12時間の制限や、アイドル時間が長いと接続が切れることがあ る 7

  8. Colaboratoryとは • Colaboratoryには、Pro(有料版、月額9.99ドル)があり、現在米国と カナダでのみ提供されている • 3月中旬にProが提供される地域が増えるとの噂がある https://colab.research.google.com/signup? authuser=2# より 8

  9. Colaboratoryとは • データ量の大きいKaggleの画像コンペでも、Colaboratoryを使って優勝した例 がある(TPUを使用) • 日本でもColab proの提供が開始すると、データ分析コンペのために、使用する 人が更に増えそう • Colaboratoryのテクニックなど、交換しましょう

    • 「colaboratoryでkaggleをするときに便利なコード」にZenn.devのスクラップがあ るので、是非書き込んでください! 9
  10. Colaboratoryテクニック集 10

  11. 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
  12. 1.テーマの設定、エディタの設定 Colaboratory上部の「ツール > 設定」から設定が可能 12

  13. テーマ:light、dark、adaptiveがある。 darkには、default dark、monokai、high contrast dark、synthwave84が選択可能 1.テーマの設定 lightとadaptiveの違いは不明 13

  14. 2.ColaboratoryかKaggleNotebookか判別 import sys # Colaboratory環境ならTrue 'google.colab' in sys.modules # Kaggle

    Notebook環境ならTrue 'kaggle_web_client' in sys.modules 14
  15. 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
  16. 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
  17. 4.Google Driveのファイルへのアクセスを許可 • Google Driveへのファイルへのアクセスを許可することで、保存していたファイ ルの読み込み、ファイルの保存ができる • Google Driveのファイルの読み書きはやや遅い •

    課金すれば、Google Driveの容量を増やせる ここをクリック ポップアップの Googleドライブに接続をクリック from google.colab import drive drive.mount('/content/drive') #挿入されたこのコードを実行し、認証 または 接続完了 17
  18. 4.Google Driveのファイルのパス • フォルダの右端をクリックからパスをコ ピーで、パスを取得可能 • このパスで、通常のディレクトリのよう にアクセスできる。 # 左のKaggleフォルダ

    ‘/content/drive/MyDrive/kaggle’ # 左のsample_dataフォルダ ‘/content/sample_data’ 18
  19. 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
  20. 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
  21. 5.Pytorchでの学習速度まとめ • 長く学習するときは、content直下にファイルをおいたほうが効率が 良い • Colaboratoryは遅くない • では、データをどのようにcontent直下にダウンロードしてくるのが効率的か 21

  22. 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
  23. 6.a データのダウンロード # タイタニックコンペの例 !kaggle competitions donwload -c titanic 23

  24. 6.a.i 速度比較 Kaggle apiでのダウンロードとGoogle Driveからのコピーの速度比較 Cassavaコンペのデータで比較。(自分でzip化した、5.8Gのデータ) ・Kaggleデータセットからダウンロードしたほうが少し早い Google Driveからcontent 直下へコピー

    Kaggle apiでkaggleデータ セットからdownload データのコピー・ダウンロード 2分24秒 1分00秒 zipfileを解凍 1分31秒 24
  25. 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
  26. 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
  27. 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
  28. 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
  29. 8.Githubのprivate repositoryをclone その1 !git clone https://username:password@github.com/username/repository.git • GithubのPasswordを直接記載する方法であり、Bringing data info

    the Google Colab environment では、「NOT recommended」とされている • Password method 29
  30. 8.Githubのprivate repositoryをclone その2 # その2、SSH keyを使う方法 !ssh-keygen -t rsa -b

    4096 -C "username@github.com" !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 git@github.com !git clone git@github.com: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
  31. 9.GitHubのipynbファイルを開く、GitHubに保存 • Colaboratoryのファイル > Notebookを開く > Github に進んで認証し、日公開 リポジトリも含めるにチェックすると、githubのipynbファイルを開くことができる •

    編集後、Githubにコピーを保存でGitHubへの保存ができる 31
  32. まとめ • MyDriveの読み書きは遅いと思っていましたが、それほど遅くはありませんで した。(前はもっと遅かった気がします) • 日本でもColaboratory Proの提供が開始されると、Kaggleでとても使えるツー ルになると思います • 他にも便利な使い方があれば、是非教えてください

    32
  33. 参照したウェブサイト • 公式 ◦ 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