かえるのプログラミングブログ

プログラミングでつまずいたところとその解決策などを書いていきます。

GitHub Actions (GHA) に入門した

ブログのモチベーション

社のつよつよな同僚がすでに設定してくれていたワークフローをポチポチしたり、手順書にしたがってワークフローを編集する pull request を出すことはあった。

1から自分でできるだろうか、身についているだろうかという不安があったのでドキュメントを見ながら手を動かしてみた。

GitHub Actions

概要は公式 documentに詳しい。

GitHub Actions を利用するモチベーション

人間は手順書通りにやっても間違える。(N敗)

デプロイやコードの静的解析や単体テストといった繰り返し実行する必要のある手順を再現可能なワークフローとして管理できると安心できる。

2024年現在、GitHub でコード管理する現場はとても多い。GitHub 上でワークフローも定義して運用できるのは使いやすくて良い。

やった内容

入門に際して、公式で提供されているこちらのサンプルワークフローを追実装した。

サンプルでは Node.js をインストールしているが、筆者は python をよく利用するので pythonHello world を print する .py ファイルを書き出し、それを実行するように変更した。

name: learn-github-actions # ワークフローの名前、Actions タブにこの名前で表示される。
run-name: ${{ github.actor }} is learning GitHub Actions
on:
  workflow_dispatch: # Actions タブからポチポチでできるようになる。

jobs:
  check-python-version:
    runs-on: ubuntu-latest # github が提供するホストマシンのうち最新の ubuntu を指定
    steps:
      - uses: actions/checkout@v4 # リポジトリを runner が使えるようにするおまじない。コードに対して build とか test とかできるようになる。
      - name: hello world python file
        run: echo "print('Hello world')" > hello.py # Hello world を print するだけの hello.py を作成。
      - uses: actions/setup-python@v5 # job で python を使うためのおまじない。
        with:
          python-version: '3.10' 
      - run: python -v
      - run: python hello.py # Hello world を stdout に出力 

できたもの

まとめ

GitHub Actions に入門し、簡単なポチポチで実行できるワークフローを組めた。 今回は Actions タブからのポチポチで起動して Hello world を標準出力するだけのシンプルなものだったが、git の push や pull request や別のワークフローの実行終了などもできるらしい。 repository template にも組み込んで、kaggle の実装でも静的解析や型検査を使っていきたい。

参考にした URL

2023年を振り返る

kaggle

2023年はチーム銀2 (金からの shake down), ソロ銅2 という戦績でした。

これまで同一ホストが2回目3回目と開催していて、王道のアプローチやソリューションが出揃っていたりTransformers のモデル順番にぶん回せばよい評価指標 RMSE の NLPコンペなど計算量とマイナーチェンジによる多様性でなんとか逃げ切れるようなコンペを選んでいました。

昨年ソロ金を取得したこともあり、これまであまり手をつけてこなかったお題のコンペにも挑戦しながら、GMに必要な5枚目の金メダル獲得を目指したものの金メダルに手が届きそうで手が届かず(Public 金からの shake down銀)悔しい思いをした1年でした。

記憶に残っているコンペについて書いていきます。

 

Hubmap チーム銀

ソロ金獲得のためのチームマージ縛りを解いて初めてチームアップしたコンペでした。

医療画像(細胞組織)のインスタンスセグメンテーションのタスクで、画像コンペは分類タスクしか参加してこなかったので学びが多かったです。

使い勝手がよいらしいと聞いていた mmdetection をはじめて使いました。ちょうど mmdetection 2系から3系の過渡期で 2系で書かれた過去のソリューションの内容を3系のドキュメントを見ながら実装するような形でキャッチアップし、銀圏上位に到達したあたりで上位のチームとチームマージしました。チームメイトたちのパイプラインが 2系で私が 3系だったこともあって、アンサンブルに苦戦しました。

まず同一の推論ノートブックで 2系の推論と3系の推論を実行する必要がありました。

どちらかに統一する方法も試しましたが、2系の実験結果が3系で、3系の実験結果が2系で再現できず断念しました。

チームメイトが 2系と3系の推論を両立できるように依存を整理してくれ解決しました。

次に推論結果をアンサンブルするところです。

インスタンスセグメンテーションでは予測結果に 座標の bbox とセグメンテーションマスク (と id) が出力されます。

これらをメモリに持っておくと 2系と3系の切り替えまで持ち続けるにはメモリが持たず、2系と3系の切り替えが必要な関係で、一回の推論ループ内で両方の推論をするのが難しいという問題がありました。

試行錯誤の結果、2系の推論結果を一回バイナリにエンコードして3系の推論中にデコードして混ぜるという複雑なことをやりました。エンコードしてデコードしても推論結果の同一性を担保しつつアンサンブルがうまく行ったのは気持ちよかったです。

このコンペでは、CVとLBで改善が見られるという怪しい処理が共有されていました。この怪しい処理は結果として private では効かないものでした。

それに頼ってスコアを上げながら金圏ボーダーを争っており、最後の最後でこの怪しい処理に頼っていていいのか不安になって急ごしらえで作った守りのサブで銀圏までのシェイクダウンで済んだという結果でした。

TrustCV だけでなく、なぜ効いてるか直感的でない怪しい処理は使うものではないなという教訓を得ました。

 

睡眠コンペ チーム銀

お題は睡眠時に装着する加速度センサー? のセンサーデータから起きたイベント、寝たイベントを検出するもので、自分にとってはあまり取り組んでこなかったタスクでした。Twitter の TL で盛り上がっていて、少しずつ公開 notebook で勉強していました。残り1ヶ月のところで激強 pipeline が公開され、その触り方に慣れてきで銀圏上位にスコアが乗ったタイミングで LBの上の方にいたチームの方々とチームを組んでもらいました。最終的に5人のチームとなり、それぞれの自前の pipeline をお持ちの2名と激強 pipeline ベースの3名(kaeru 含む)で進めていました。久しぶりの5名チームで評価関数をよく理解したアプローチやドメイン固有の後処理などチームメンバーのアイデアや実装力にたびたび助けられながら取り組みましたが、最後は shake down してしまいました。

ソリューションを見ると多様なアプローチが存在していました。復習や基礎を勉強し直すのによい教材だと思い、今はじっくり勉強をし直しています。


CTFコンペ ソロ銅

Capture The Flag (CTF) というセキュリティ技術版の kaggle みたいなものがあり、それが kaggle 内で開催されていたので興味があってでました。

情報セキュリティに関する問題で、かつ機械学習やコンピュータビジョンに関係がありそうなものが全27題出題されました。早い者勝ちで最も多くの問題を解いた人から賞金とメダルが獲得できる & 激しい計算リソースが必要ないひらめき勝負ということで参加しました。

開催期間中のコードやアイデアの共有が禁止されていたこともあって、難しかったですが、

GPT っぽい API に対する攻撃や xml インジェクション、Adversarial Attack の基本などが学べてよかったです。

 

(前年個人比)で技術書をたくさん読みました。輪読会のお題であったものから自分で選んだものまで、通しで読めたものからつまみ食いしたものまで色々読みました。型、テスト、基盤、LinuxGPUなどソフトウェア開発やハードの方面まで色々な関連技術に興味を持って読んだ内容が自分の中で繋がっていって楽しかったです。

 

仕事

昨年11月に転職した会社に引き続き在籍しています。勤続1年と1ヶ月です。はじめの半年は MLE としてモデリングをメインに、データアノテーションを社内の別のチームに依頼するところから、MLOps のチームが整備運用してくれている MLの推論基盤にデプロイまでして、あとはお客さんの手元に機能が届くところまでの各チームとの調整といった業務に取り組んでいました。現在までの半年は、MLOps エンジニアとして、推論基盤の作成や再学習基盤といった Google のサービスを組み合わせて MLモデルを運用するための仕組みの実装に取り組みました。MLOps とても楽しいです。また、エンジニアとして自分1人だけの視点のみならずチームの拡大や成長のためにできることを考えて動くことにもチャレンジしました。カジュアル面談や面接といった採用活動への参加や、新しく入ってくれたメンバーがすぐ活躍できるよう環境構築用のコンテナ環境を整えたり、オンボーディング資料を作ったりしました。まだまだ手が届かないところも多いですが、「個から組織に目を向けてできることからやっていく」は継続したいと思います。

 

プライベート

結婚して、新婚旅行に行って、引っ越し先も決めて人生が大きく動きました。

 

まとめ

2023年はプライベートが大きく動きました。

kaggle では GM チャレンジ継続中で、金圏からの shakn down で銀圏という悔しい結果が 2度続きました。触ったことがないようなお題のコンペにも取り組めて楽しかったです。

本も読みました。仕事についてもできることも視点も拡がってまだまだやることがありそうです。

2024年はまず GM になりたいです。

ありがとうございました。

Kaggler なら知っておきたい GPU の話

Kaggle アドベントカレンダー2023 の 12 日目の記事です。

一般販売向けの GPU の技術仕様の読み方や GPU の仕組みについていろいろ勉強して社内の勉強会で発表しました。

その資料をベースに磨き込んだ内容をお届けしようと思ったのですが、間に合わなかったので スライドの内容をそのまま共有します。🙇

オンプレ GPU を買いたくて HP とか見ているけどわけわからんと悩んでいる方、 よくわからんけど強いんやろ!!って普段使っている A100 や V100, T4 がどんな仕組みで動いているのかとかに興味がある方に届くと嬉しいです。

最初の方で紹介している Flash Attention の論文は、Attention の計算のメモリ効率を改善するためにハード面に目を向けた面白い論文です。CPU ←→ GPU のメモリ間のデータ転送の仕方を工夫するために CUDA 内部で記述されている計算処理を工夫してメモリ効率を高めています。

新しい torch 2系では(使用可能な場合)デフォルトでこの Flash Attention が適用されるので torch をアップデートすれば恩恵を受けられますが、裏ではこのような工夫がされているんだな〜と知っていると見え方が変わるかもしれません。

(超人 kaggler の中には cuda kernel の実装を修正してモデルの計算速度を改善している強者もいるらしいです (すごい))

speakerdeck.com

2022年を振り返る

お久しぶりです。 kaerururu です。

2022 年の振り返りをしようと思います。


kaggle

2022 年は ソロ金 1, チーム金 1, ソロ銀 1, ソロ銅 3 に加えて, kaggle days championship final 出場という戦績でした。 他にもメダルは取れなかったけどやりきったコンペが一つありました。(訳あって戦績からは抹消されていますが...)

2021 年末に掲げた ソロ金を獲る を達成できました。あと金メダル一枚で GM です。


PetFinder.my - Pawpularity Contest (5/3537)

  • result : 金
  • member : yuki-san, tommy-san, cpptake-san, shokupan-san
  • ジャンル : 画像
  • 通称 : Pet コンペ 2

保護動物の里親探しのサイト主催で, 与えられた犬猫画像に対して独自に定義された連続値である可愛さスコア(Pawpularity) を予測するコンペでした。

ターゲットがノイジーで同コンペで与えられた同一・類似画像で異なる値がついていたり, train データが 9900件程度しかないこともあり, 与えられた画像のみを Deep de pon するだけでは運要素の非常に強いコンペでした。

しかしながら, 過去コンペである pet1 コンペで与えられた画像との被りがあり, 類似度でマッチする過去コンペ画像に紐つくメタデータを特徴量に加えるとスコアが跳ね上がったり, 最終的に private 1st になったのは事前学習済みモデルから抽出した embedding を rapids の SVR で学習したモデルでした。

銅メダルをふらふらしていたところ上述の 4人のチームに誘われました。当時 public 2位で, 同ホストの前回コンペ 1st だったことを買ってもらったそうです。当時ソロ金のためにチームマージ縛りをしていたのですが, 欲に負けてお受けしました。(2位に声かけられたら断れない...)

チームマージしてから過去コンペで効いた特徴量を加えたりして public 1st まで登りつめました。最後 3週間くらいは stacking と blending を混ぜたり, 最終サブ選びについて考えたり, ひたすら shakedown 対策をしていたのですが, 最後の最後で shakedown して 5位で finish しました。

日本人大勢でわいわい取り組む久しぶりのコンペでした。


Jigsaw Rate Severity of Toxic Comments (95/2301)

  • result : 銅
  • member : ソロ
  • ジャンル : NLP
  • 通称 : jisgaw 4コンペ

与えられたテキストの毒性スコアを当てるコンペ。学習用データセットは与えられず, これまでに同ホストより開催された3回のコンペのテキストを使用することを指定されました。また正解データはスコアとしては与えられず, more toxic と less toxic のテキストのペアが与えられていました。このため pairwise 学習などの工夫の余地があり楽しそうなコンペでしたが, (記憶がほとんどないが) LB が壊れており, trust cv が求められたコンペでした。


BirdCLEF 2022 (68/807)

  • result : 銅
  • member : ソロ
  • ジャンル : 音
  • 通称 : 鳥コンペ3

ハワイに生息する鳥類の音声サンプルを使ってモデルを学習し、5sec clip の環境音サンプルに、それぞれの鳥類が鳴いてるかどうかを当てるコンペでした。

2021コンペで与えられた validation 用の環境音データがなく, さらに CV 計算用の関数が与えられず (強いて言えば macro F1 が近いよ!とのこと) 手元 CV が計算できない上に, class inbalance であったとても難しいコンペでした。

オチとして同ホストが鳥類の音声データで事前学習した(コンペデータは学習に使っていないらしい) BirdNet を使った solution が金圏 finish していました。

個人的には, transformer base の音声モデルを試したり, 鳥2までの延長線上の手法をポンしてスコアが伸び悩んで終わりました。

他にも少数サンプルデータをハンドメイドでアノテーションした解法が金圏 finish していたので次あったら試してみたいです。


Foursquare - Location Matching (76/1079)

  • result : 銅
  • member : ソロ
  • ジャンル : マッチング
  • 通称 : 4sq

位置情報サービス提供者がホストのコンペで与えられた地点データの中から同じ場所を表す地点をまとめるコンペでした。色々やらかしがあってとても賑わったコンペでしたが, knn や faiss などで候補集合を作成し, 決定木で同じか同じでないかの 2値分類問題を解くような多段アプローチが必要なコンペはあまり出たことがなかったので新鮮でした。(landmark はデータ重かったり TPU の学習コストが云々言い訳して避けてきました) またメモリ管理が難しくこのコンペの感想戦で教えてもらったメモリ管理手法は学びでした。


Feedback Prize - Predicting Effective Arguments (136/1557)

  • result : 銅
  • member : ソロ
  • ジャンル : NLP
  • 通称 : FB2

アメリカの学生が書いた小論文を discourse elements ごとに Ineffective, Adequate, Effective の項目ごとにスコアリングするコンペでした。

deberta-v3 family が強いことや tokenizer に独自トークンを追加したりする手法などを学びました。


Feedback Prize - Predicting Effective Arguments (13/2654)

  • result : 金
  • member : ソロ
  • ジャンル : NLP
  • 通称 : FB3

アメリカの学生が書いた小論文を cohesion, syntax, vocabulary, phraseology, grammar, conventions の項目ごとにスコアリングするコンペでした。

与えられた学習データが 4000件程度だったり, 6項目の RMSE の平均が評価指標だったりただでさえ shaky な要素が揃っていたのですが, その上 public LB の表示桁数が小数点下2桁まで + ハイスコア public notebook の存在で public LB が信用ならない状況でした。

コンペ終了10日前くらいに金圏に到達し, 最後までボーダーラインをふらふらしていたのですが, shake しないように diversity 確保と trust cv に全振りしました。その甲斐あって public, private 両方とも金圏に残ってのソロ金獲得できました。

前回コンペのソリューションや, 同じテキストの回帰問題であった commonlit コンペのソリューションを片っ端から試したり, kaggle notebook 環境のメモリ管理のため個別の script で実行するなど, 過去参加した全てのコンペでの学びを発揮できたコンペでした。

また, コンペ中に TitanRTX を増設し VRAM 64GB を手にしました。


DFL - Bundesliga Data Shootout (-/530)

  • result : -
  • member : ソロ
  • ジャンル : 動画
  • 通称 : DLF

ドイツのサッカーリーグ主催で動画データ内の特定のプレーとその発生時点を予測するコンペでした。

今まで取り組んだことがなかった動画データのコンペであったのと LB 公開が待てなくて参加していなかった 2stage 制のコンペであったことからチャレンジしてみたのですが, げきつよ公開notebook に蹂躙され銀圏にも残れなかった上に, 学習済みの重みを全て消してしまい rerun 時に落ちてスコアが出ない結果となりました。(無念)

散々な結果でしたが EDA でサッカーのプレイ動画を見るのは楽しかったので類似コンペがあったらチャレンジしたいです。


Kaggle championship final

昨年参加した予選で参加資格を得たので決勝大会参加のためスペインのバルセロナに行ってきました。コンペ自体は 11h で同時に 2コンペ開催というハードなものだったのと盛大な shakedown で残念な結果でしたが, 初海外に行けたのは思い出深かったです。チームメイトだった takuoko-san, upura-san, ynktk-san には感謝です。


仕事

2年3ヶ月お世話になった六本木の web 系企業を退職し, 11月から下町のベンチャー企業に転職しました。その会社では 4月半ばから半年にかけて業務委託として参画させてもらい正社員になったらどんな人とどのように一緒に働くことになるのか具体的なイメージを持って転職することができました。

自分のキャリアで全く関わってこなかったドメイン知識を必要とする会社ですが, 尊敬できる同僚に囲まれながら日々楽しくコードを書いています。


その他

昨年の抱負でも書きました仮想通貨 bot 作成に 2ヶ月くらいチャレンジしました。 ネットで拾ったり自分でアイデアを出して取引戦略を立てる, その取引戦略で実際に勝てるのか時系列でデータを分割し, シミュレーションを実施する。 その取引戦略に基づいて 取引所の API を使用し注文を出し実際に市場でトレードするというところまではできました。

金融のドメイン知識を獲得し, より複雑なアルゴリズムの構築にチャレンジすることやクラウドインスタンスを建てて取引ログを DB に保存するといったシステム構築までやってみたかったのですがのめり込めず途中でやめてしまいました。


来年の抱負

最後に来年の抱負も書いておきます。

  • 金メダルを獲得し, Competition GM になる
  • チームマージをして色々な人とコンペに参加する
  • やった事ないコンペにも参加し, コード資産を拡充する
  • テストコードを個人開発で書く習慣をつける
  • OSS にコミットする

以上です。

ありがとうございました。

PC構築初心者による Kaggle 用 オンプレ GPU マシン組み立て事始め

はじめに

こんにちは, kaerururu です。この記事は kaggle アドベントカレンダー 2022 12/05 分です。 この度 PC構築初心者の私が, 自宅の Kaggle 用 TitanRTX 1枚挿し GPU マシンを増築して TitanRTX 2枚挿しにしました。その過程で得た知見 (パーツ選びの際に気をつけることやハマりポイントなど) を書いていこうと思っています。


想定読者

  • オンプレ GPU マシンを作りたいけどパーツの選び方とかわからないよっていう人
  • BTO で PC 買ったけど, スペックを上げたいなと思っている人
  • 計算機そのものも欲しいけど, パソコン自分で組み立てること自体に興味が持てる人 (重要)

筆者とオンプレマシンについて

  • 機械いじりド素人
  • GCP などのクラウド資源だとコスト気にして実験に集中できないよと思い, 2020年? くらいに BTOGPU マシン(GeForce RTX 2080ti * 1, GPU 11GB, メモリ32GB) 購入 (33万)
    • 機械いじりに自信なく高い買い物して動かなかったらショックだったので, BTO で購入。
  • 11GB じゃもの足りなく感じ中古で Titan RTX 購入 (40万)
    • 当時最も半導体が値上がりしていたので中古で 40万とかなり下手くそな買い物になりましたがそのマイナスを差っ引いても満足度の高い買い物でした。
    • GPU の挿し替えのため, 初めてパソコンのケースを開けました。
  • メモリが貧弱で GPU に乗せる以前の処理がボトルネックになっていたことが判明, 追加で 16GB * 2 購入。ようやく回したい実験をストレスなく回せるようになりました。
    • メモリのスロットが 4箇所あり, うち 2箇所は買った時点で埋まっていたのですが, 残りの 2箇所に挿すだけでした。
  • 24GB だけでもコンペを選ばなければ, 現実的な実行時間でコンペに取り組めていましたが, もう少しマシンパワーが欲しくなり追加で中古 Titan RTX 購入 (30万くらい)
    • それに伴い, マザーボード, 電源, CPU, ケースなどを追加購入
    • 初の大規模な増築でした。

筆者の PC の中身 なかなか散らかっている


本題

ここからは, パーツそれぞれについて選び方やハマったポイントを書いていきます。

最小構成といって, マザーボード, CPU, CPUファン(グリスも), メモリ, 電源, (GPU) が用意できれば起動して Bios 画面に移行できるので最低限のパーツについて紹介します。

GPU

  • Kaggle 用マシンにおいて最も重要でお金のかかるパーツ
  • 筆者は買い物が下手くそなので中古で合計 70万円使って Titan RTX (24GB) ものを 2つ買いました。
  • 筆者の所感ですが, GPU 選びのポイントは

    • 1枚で最低 24GB あると望ましい, 16GB 未満なら自宅マシンをあえて作る必要性を感じないレベル
      • GCP で比較的価格を抑えて instance を作成するときに選ぶであろう T4, P100, V100 は1枚あたり 16GB
    • 2枚以上の場合は, nvlink という専用のブリッジ (まあまあ高い) を 2枚の GPU に接続して仮想的に 1枚の GPU として扱うか, GPU を使うソースコード側で DDP という 2枚の GPU を勾配などを共有しながら使用するような実装をする必要があり面倒くさいです。
    • 複数挿しにする場合は,
      • 電源を電力をたくさん供給できるものにする (TitanRTX 一枚の時は 750W, 2枚の今は 1250W のものできちんと動いています)
      • GPU 2枚が挿さるマザボ, GPU 2枚挿さっているマザボとコードがしっかり収まるケース
      • 冷却設備 (空冷・水冷など, 後述)
      • なども用意する必要があります。
  • よく見る GPU たち

GPU メモリ (GB)
RTX 3080 10
RTX 3080ti 12
RTX 3090 24
RTX 3090ti 24
Titan RTX 24
RTX A4000 16
RTX A4500 20
RTX A5000 24
RTX A5500 24
RTX A6000 48
  • 参考 : GCP で選べる GPU たち
GPU メモリ (GB)
NVIDIA K80 12
NVIDIA P4 8
NVIDIA P100 16
NVIDIA V100 16
NVIDIA T4 16
NVIDIA A100 40

電源

  • 規格
    • 1250W Gold のように書かれていて, W は文字通り電力量, プラチナとかゴールドなどが書かれているのは電力への変換効率だそう。
  • 選び方
    • GPU は電力消費が激しいので, たくさんの電力を供給できる電源を用意する必要がある。
    • 筆者の環境では, TitanRTX * 1 -> 750W, * 2 -> 1250W でしっかり動いています。

マザーボード

  • 規格

    • ATXmicroATXMini-ITX などがあり, 左に行くほど大きい。
    • 筆者は BTO 購入時についていた microATXGPUを2枚, メモリを4枚挿して使用。(あまりオススメしない)
  • 選び方

    • GPU が 2枚挿さりそうな大きいもの
      • ただ2枚挿さるだけでは冷却性能の観点で不十分かもしれない, 空間的余裕が欲しい
      • GPU の温度が上昇しすぎると性能が落ちたり壊れたりするらしい...
    • メモリが 4枚以上刺さるもの
      • スロットの他に, 積める最大メモリ量というものが決まっており, 筆者の microATX マザボでは最大で 64GB までしか載せられない(とても困る)
  • やらかし

    • マザーボードによって対応しているメモリの規格 (DDR4 2666 みたいな), CPUソケットの規格 (LGA~) などが決まっているため, すでに持っているパーツを流用したい場合は気をつけて選びましょう。 (1敗)

CPU, CPU ファン, グリス

CPU

  • 規格
    • intel core i5 とか core i7 とか聞いたことのある人も多いと思います。
    • core i7-9700 みたいな感じで, i7 がグレードで 9700 が世代です。
    • AMD Ryzen シリーズもありますが, Ryzen は買ったことがないので何とも言えません。
  • 選び方
    • core i7-9700 を筆者が使用していますがこれといって不便は感じていません。- 並列数やらで選ぶといいらしいです。
  • やらかし
    • CPU とマザーボードを一気に新調しました。しかし, 起動テストで Bios 画面に移行せず, ネットで調べると CPU かマザーボードのどちらかに原因がありそうというところまでしかわからなかったため, どちらも返品しました。初心者の人は片方ずつ新しいものを用意して, どちらかは必ず動くことが担保されている状態で新しいパーツを購入した方が良さそうです。

CPU ファン

  • 概要
    • CPU につけて冷やす役割
  • 選び方
    • CPU にセットになっているものもあるが別途買った方がいいらしい。CPU は高温になりすぎると PC が落ちたり, 壊れたりするのでよく冷やしましょう。ファンを別途購入する場合, 対応する CPUソケットのものを買いましょう。筆者は自分で組み立てられて ryzen, intel, 複数のLGA規格に対応できるものを買いました。ファンも2つついてます。

グリス

  • 概要
    • CPU とファンの間に塗る粘土みたいなもの。CPU からファンに熱を逃がす役割がある。
  • 選び方
    • ファンに最初からついてるものもありますが, 別途購入した方がいいらしい。筆者は 400円くらいものを購入。

メモリ

  • 規格
    • DDR4 2666 のように決まっていて, それぞれ世代, 周波数を意味します。
  • 選び方
  • やらかし
    • DDR4 だけに注意して DDR4 3200 のメモリを購入, 3200 はマザーボードに対応していなく挿しても PC が認識しませんでした。
    • メモリを挿す場所が複数ある場合は, 挿す順番も決まっており, 間違ったところに挿しても PC が認識しません。

ケース

  • 選び方
    • マザーボードに対応しているものが良い (ATX 用とか)
    • 冷却性能に不安がある場合はファンがついてるものとか
    • 光るものもある (光らなくても良い, 電気代を考えると寧ろ光らないほうが良い)
    • 究極なくても問題ない
      • オシャレな剥き出しマシン (埃とかの掃除大変そう)

筆者の完成した PC (カッコイイ)


最後に

  • 色々書いてきましたが, マザーボード, CPU, メモリなどそれぞれこの規格でないと動かないなどの罠が多く, 初心者には難しいです。
  • 初期費用を抑える -> 手元の環境じゃ満足できなくなって増築を繰り返してきました。増築のプロセスは工作みたいで楽しいですが, 時間かかりますし間違ったパーツ買った時のショックは大きいです。
  • 自宅 GPUマシンを購入するなら腹を括って LambdaPC を買ってしまった方が良いです。(今なら RTX A5000 (24GB) 2枚挿しで 140万円くらい)

参考URL

追記

  • 2022/12/05
    • nvlink 周りの記述が正確ではないため, 取り消し線しました。

2021年を振り返る

2021年を振り返る

お久しぶりです。 kaerururu です。

2021 年もあと 2日で終わるということで、今年の自身の出来事について振り返ってみようと思います。


kaggle

2021 年は ソロ銀 1, チーム銀 1, チーム銅 1 に加えて, kaggle days championship new delhi 3rd (チーム) という戦績でした。

他にも新しいコンペが生える度にチラホラ参加していたのですが、メダル圏に残らなかったり計算が重かったりしてモチベーションが続かず途中でポンしたりしました。

Deep でポンで始まり、途中でポンです。


Rainforest Connection Species Audio Detection (16/1143)

  • result : 銀
  • member : arai-san, nakama-san, hiraiwa-san
  • ジャンル : 音声
  • 通称 : 鳥蛙コンペ

環境音サンプルと何秒目から何秒目までに、その鳥類や蛙が鳴いてる場合はその周波数が与えられており、テスト環境音サンプルでどの種類が鳴いてるか当てるコンペでした。

tp と fp のデータが与えられていて fp のデータを工夫して使えていたチームが強かったようでした。

この頃のメインマシンは RAM 32GB, VRAM 12GB と控えめなマシンをメインに使っていたこともあり、最後の最後でチームへの貢献ができなくなっていってつらみを感じるなどしてました。


BirdCLEF 2021 - Birdcall Identification (81/816)

  • result : 銅
  • member : インドの方
  • ジャンル : 音声
  • 通称 : 鳥2コンペ

鳥類の音声サンプルを使ってモデルを学習し、環境音サンプルの何秒目から何秒目までに、その鳥類が鳴いてるかどうか、鳴いてる場合はその種類と鳴いていない場合は鳴いていないなどを当てるコンペでした。

鳥1 コンペのデータや solution を使ったりして、足掻きに足掻いてなんとか銅メダルを獲得するという無念な結果でした。

また、はじめて海外の方と 1on1 でチームマージをし、英語でやりとりなどを行いました。音楽性の違いからかうまく行かず最後一週間ほどは一人で取り組みました。

チームマージするなら金圏付近で という教訓を得ました。


CommonLit Readability Prize (48/3633)

  • result : 銀
  • member : ソロ
  • ジャンル : NLP
  • 通称 : commonlit

"読みやすさスコア" を回帰で求めるシンプルなタスクでした。

やることが早々になくなり、アンサンブル大戦になっていましたが、なんとかソロで完走する事ができました。

コンペ途中で TitanRTX を購入し、VRAM 24GB の快適さを得る事が出来ました。

この辺りからソロ金が無性に欲しくなり、ソロ縛りでコンペに取り組み、ラスト 5日前くらいまでは金圏と銀圏の反復横跳びをしつつ、public 25th で finish、shake up ワンチャンの希望を抱いて確認した private は shake down して 48th と無念な結果でした。

また、コンペを終えてから RAM を 32GB 増築し、64GB になってさらに快適になりました。


kaggle days championship

  • result : 圏外, 3rd
  • member : takuoko-san, upura-san, ynktk-san
  • ジャンル : 画像、匿名テーブル

前 petfinder コンペのチームメイトの方々と 4人で kaggle days のコンペに参加しました。バルセロナで開催される本戦の予選という形で全12回開催されるうちの 2回に参加し、本戦出場要件の 3rd 以内に入る事が出来ました。

4時間という短いコンペの中で、まずサブができるように、いろんなデータ、評価指標に素早く対応できるように用意していたコード群 (パイプライン?) が役に立って何とか weight0 にならずに済みました。

海外渡航経験もなく、世界情勢にもよりますが、初の海外参戦がチームメイトとバルセロナはかなり胸が熱いです。本戦で足を引っ張らないように素振りを続けていきます。


その他

他にも、これまで参加したことのない object detection コンペの素振りとして小麦コンペの late submission を colab pro でできる範囲でチマチマやったりしてます。

新しいことを始めるのは楽しいです。


仕事

昨年の 8月に転職した六本木の web 系企業で引き続き データサイエンスとか機械学習やらに取り組んでいます。

現時点で勤続 1年5ヶ月弱と、前職の勤続 1年3ヶ月を上回り、社会人5年目にして自分史上最長の勤続期間を絶賛更新中です。

昨年は主にタスクを振ってもらってじっくり取り組むといったような働き方をしていたのですが、今年の 9月くらいから自分で担当サービスの課題について仮説を立て、施策を考え、分析・提案・承認を得て、実装するといった一連のプロセスに携わる事ができるようになりました。

評価してもらえるような成果もいくつかあげられました。

今の職場は、ステークホルダーとの関係がすでに築かれていて、データ基盤や運用基盤も整っており、分析・実装に集中できる素敵な環境だと思っています。(カジュアル面談も担当しています!)

一方で、この整った環境を自分で用意し、仲間を集める力がこの先の自分のキャリアに必要になってくると考えています。

今の会社のドメインほど面白いドメインに携われる会社もそうそうなさそうに感じていますが、自分の興味が変わった時に自分で環境を整えられるように知識と技術を蓄積していきたいと考えています。


来年の抱負

最後に来年の抱負も書いておきます。

  • ソロ金を取る
  • object detection などやった事ないコンペにも参加する
  • 仮想通貨売買 bot を作る
  • 仕事でもっと成果を出す
  • SAA とか統計検定 (2級から) とか勉強する

以上です。

ありがとうございました。

atmaCup#10 で念願の物理メダル獲得した

こんばんは、kaerururu です。

先日終了した atmaCup#10 にて、念願の nyk510 賞 (物理メダル) を獲得したので、喜びが新しいうちに思ったことなどを書き残していこうと思っています。

ちなみに順位は private 12位 (public 16位) と一時 top3 が見えていた (入ってはいない...) こともあり少々悔しい結果になりましたが、まあよしとしてます。

solution は こちら


もくじ

  1. nyk510 賞とは

  2. 心がけていたこと

  3. おわりに


1. nyk510 賞とは

ディスカッション1 にて最もいいねをもらった投稿の主に与えられる賞のことで、回によって賞品があったり栄誉のみが与えられたり、ある場合は現金や物理メダル2 が進呈されるなど内容が異なるという特徴があります。

2. 心がけていたこと

先にも述べたように、今回は nyk510 賞が物理メダル対象かつ自然言語データが含まれていました。

前職 (最近だと現職でも) では自然言語処理を扱う会社にいた & 初心者歓迎コンペ ということもあり、何かしらテキストデータに不慣れな人に向けてテキストデータを特徴量に変換できるような手助けができればいいなと思い、何かしら書こうと思いました。

実際に投稿したポストはこちらです。

https://www.guruguru.science/competitions/16/discussions/fb792c87-6bad-445d-aa34-b4118fc378c1/

さて、何かしら書くにあたって気をつけたことですが、

  • スピードを重視

  • 被りがないように

  • コピペで動く

の 3つを意識しました。

1つ目のスピードについては、atmaCup では kaggle などにも普段出ている人を中心にみんなの情報共有意識がめちゃくちゃ高いです。つまり早く出さないと同じアイデアを他の人に出される心配があります。また投稿数が増えていくと自分の投稿が埋もれる心配もあるのでどうせ出すならさっさと出そうと思ってました。

そこで私は、以前から作っていた特徴量変換スニペット をチョチョイといじって開始 15分くらいでポストしました。

投稿自体が 2, 3番目くらいだったのでいいアピールになったと思います。

あまりにもスピード投稿しすぎたために、なんと出てくる自然言語のほとんどがオランダ語であることに気づく前に英語 BERT のポストを投げてしまいました。というともすれば有毒なポストになりかねないと思い、オランダ語、多言語の重みの指定の仕方を追記するという形でことなきをえました。:kusa:

2つ目の被りがないようにというのは、主に運営の講座3 の内容を意識したもので、特徴量作成の基本はここの講座で語られることが多いです。テキスト処理で言う所の基本は、BoW, tfidf, w2v, また特徴量化と言う観点だと長さや単語数とってきたり といった所ですが、やはり講座では tfidf * SVD による特徴量作成法と長さを特徴量にする手法が紹介されていました。

また w2v については、atmaCup ではカテゴリカルデータの埋め込みという文脈で使われることがママあり、これについても誰か投稿するだろうということで見送りました。(案の定共有されていた)

3つめのコピペで動く、については、メタな話になりますが、こと atmaCup ではアイデアのみの共有よりも コピペで動くソースコードつきのポストの方がいいねをもらいやすいです。スターターノートブックなどもいつも多くいいねされていますし、スターターノートブックが nyk510賞をもらった回もあったと思います。

また、自身を振り返って見ても LGBM に特徴量を追加していってスコアが上がっていくのが楽しいフェーズがあり、そのころは以下に特徴量を作ってやろうかといろんな過去コンペやらを回遊しては継ぎ足していっていました。

という訳でコピペで動くようなクラスの提供といった形で共有しました。

3. おわりに

atmaCup での一つの目標としていた "物理メダル" を nyk510 賞という形で獲得 (内定) しました。

またツイッターなどで kaeru BERT 使いやすい!という声や、今回の top3 のチームのうち 1, 2 の方々が kaeru feature 使った!って言ってくれるなどとても喜ばしい声が聞こえてきて喜ばしかったです!(小泉進次郎構文)。(これは実質私も1位のチームメイトと言っても過言ではないのでは... (暗黒微笑))

今度はきちんと top3 に入ってメダルもらえるように張り切っていこうと思います。

ありがとうございました。



  1. 参加者同士がコンペに関する情報を交換しあう掲示板のようなもの。チームを組んでいない参加者同士の情報共有はルールにて禁止されている。

  2. kaggle などのコンペティションサイトだとユーザーページにデジタル上でメダルが表記されているが、atmaCup では中の人が発注したメダルが郵送される (らしい)。獲得権は毎回のコンペの Top3 と nyk510 賞 (ない場合もある) にある。ちなみにコンペで top3 はなかなか難しい。(強くなりたい)

  3. 初心者向け講座と題して、中の人が、EDA ~ 初回サブミットまでのプロセスをめちゃくちゃ丁寧に解説してくれます。