0.5から始める機械学習

Machine Learning, Deep Learning, Computer Vision に関する備忘録

Trainsによる実験管理 ~サーバー立ち上げ編~

こんにちは

みなさんは機械学習/Deep Learningにおいてどのように実験管理をしていますでしょうか?

  • ハイパーパラメーター
  • テスト結果
  • 学習済みモデル
  • ソースコードのバージョン
  • etc.

挙げ始めるときりがないですが、様々な項目を管理する必要があると思います。

一番シンプルな方法はエクセルで管理するという方法もあるかと思いますが、今回はもう少しスマートに管理する方法について記事にしてみました!

Trains

今日紹介するのは、Allegro AI社が提供しているTrainsです。

allegro.ai

Trainsの特徴を挙げると

  • 強力な自動ロギング機能
    • 2行追加するだけでハイパラ、メトリクス、学習済みモデル、コミットIDなどを自動でログ
  • Single Page Application で快適なUX
  • ローカルサーバーにホスティング可能
    • 社内で安心して運用可能

まだまだありますが、非常に使い勝手がよく便利なツールになってます。

以下ではローカルサーバーにホスティングする方法についてまとめていきます。

続きを読む

deepopsを使ったGPUクラスター(kubernetes)の構築

今日は学習基盤となるGPUクラスター(kubernetes)をdeepopsを使って簡単に構築する方法についてまとめます。

特に企業勤めでproxy周りの設定が必要なことを想定して、そのあたりの設定についても詳しく書いて行きたいと思います。

deepops

deepopsは、NVIDIAOSSとして提供しているGPUクラスター作成用のツール群です。

実体としては必要な機能をインストールするためのシェルおよびAnsibleの集合体となっています。

deepopsの中から必要なスクリプトを実行することで、各ノードPCにGPU処理を可能にするためのnvidia-dockerなどがインストールされたkubernetesベースのGPUクラスターを構築することができます。

deepopsではkubernetesだけでなく、SlurmベースでもGPUクラスターを作成できますが、今回はkubernetesベースで話を進めます

続きを読む

Nuxt.js でプロジェクトを作成するまで ~ArXiv Bookmark開発記その5~

開発記第5弾はNuxt.jsでプロジェクトを作成するところまでを簡単にまとめたいと思います。

めっちゃ簡単にwebアプリケーションが作れちゃいます!!

ja.nuxtjs.org

ということで順にインストール手順をば紹介します。

1. Node.js とnpmのインストール

まずはこいつらをインストールしていきます。

ちなみに、

  • Node.js: サーバーサイドjavascript
  • npm: Node.jsのパッケージマネージャー

って感じです。

あ、今回はUbuntu18.04でのインストール方法についてです。

win, macの方はそれぞれ適当に調べてくだされ...

導入手順

node.jsのインストールには色々と方法がありますが、node.jsおよびnpmのバージョン管理もできちゃうn packageを使った方法でいきます。

まずはaptからnode.jsとnpmをインストールします。

$ sudo apt install -y nodejs npm

次に、n packageをインストール

$ sudo npm install n -g

そして、n packageを使ってstable なnode.jsをインストールします。

$ sudo n stable

ここまできたらaptで入れたnode.jsは不要なので削除しておきます。

$ sudo apt purge -y nodejs npm

再ログインしてちゃんとインストールできているかバージョンを確認してみましょう。

$ node -v

色んなサイトに色んな方法でインストール手順があると初心者はどれを採用したらいいか分からないので戸惑いますよね...

2. Nuxt.js

node.jsとnpmがインストールできればほぼやることは終了してます。

Nuxt.jsでプロジェクタを立ち上げるためには以下のコマンドを叩くだけです!

$ npx create-nuxt-app <project-name>

ね、簡単でしょ。

ちなみに、ここのnpxは最新のnpmをインストールしていれば自動で入っているはずです。

この後プロジェクトの詳細について何個か質問があるので適宜答えていきましょう。

? Project name <project-name>
? Project description <My legendary Nuxt.js project>
? Author name <Your name>
? Choose the package manager <npm or yarn>
? Choose UI framework <Vuetify.js> : UIフレームワークを選択.オススメはVuetify.js
? Choose custom server framework <None (Recommended)> : サーバーフレームワークを選択
? Choose Nuxt.js modules <Axios, Progressive Web App (PWA) Support> : axios, PWA対応を選択(後からでも導入可能ですが、axiosはほぼ必須なので入れておいていいでしょう)
? Choose linting tools <ESLint> : コードフォーマッターの選択
? Choose test framework <None> : テストフレームワークの選択
? Choose rendering mode Single Page App : アプリケーションモードの選択

こんな感じで私は選択しました。

ここまで来るとターミナルが忙しそうに依存関係をインストールしてくれるのでしばらく待ちましょう。

インストールが終われば

$ npm run dev

でアプリケーションを立ち上げられます。

http://localhost:3000

にアクセスして画面が表示されていればプロジェクト作成完了です。お疲れ様でした!!

まとめ

ターミナルで数行コマンドを実行するだけでアプリケーションを立ち上げられちゃうなんて、Nuxt.jsしゅごい...

FlaskからNuxt.jsへ ~ArXiv Bookmark開発記その4~

こんにちは

ArXiv Bookmark開発記第四弾です。

突然ですが、Flaskやめるってよ。

元々の構想はFlaskだけでやる予定でしたが、色々あってFlask以外でサーバーを構築しようかと考えています。

今日はそんな感じの話。

Why ?

色々と紆余曲折があったのですが、簡単に流れをかくと

検索結果に応じて記事を消したり、書き直したりするのめんどくさくね? → データに応じて変わってくれないかね → データバインディングなライブラリがあるらしい → React, Angular, Vue??

てな感じで今フロントエンドでホットらしい単語にたどり着きました。

選ばれたのはNuxt.jsでした

メジャーなライブラリ/フレームワークがこの3つらしそうなので、この中から選ぼうと思い色々と調査してみました。

1. Angular

google謹製のフレームワークらしい。

angular.io

フルスタックフレームワークということで学習コストは高めらしい、フロントエンドのスキルを専門にしたいわけではないのでコストが高いのはちょっとなぁというイメージ。

2. React

Facebook謹製ライブラリ。

ja.reactjs.org

ちょっと見てみたけど、コンポーネントの書き方がちょっとわかりにくい気がする...

3. Vue

jp.vuejs.org

使いやすさに重きを置いているらしい。確かにサンプルもわかりやすい。

googleトレンドでも僅差ではあるけどこの3つでは一番みたい。

ということでVueをベースに考えていこうという流れになりました!!

Hello Nuxt.js !!

そこでVueで検索しているとやたらと関連ワードに出てくるNuxt.jsという言葉があったのでなんぞやと調べてみると、Vueを使ったアプリケーションを作成するためのフレームワークとのこと。

ja.nuxtjs.org

なんかめっちゃいい感じに設定とか自動的にやってくれるらしい!!求めてたやつやん!!

試しにちょっといじってみたら確かに使いやすい!!

しかもいい感じのUIフレームワークもある!!!

vuetifyjs.com

これっきゃないということでNuxt.jsで作っていこうかと思います!

まとめ

急遽FlaskからNuxt.jsへと変更することになりましたが、上記のように考えた結果です。

Pythonから離れるので少し心配でもありますが、web系のスキルもwebサイトを作るというよりはGUIアプリケーションの一つの選択肢としてスキルアップしていきたいと考えているので、思い切って学んでいこうと結論に至った次第です。

次回以降はNuxt.jsでArXiv Bookmarkを作っていく過程を連載していく予定です!!

続き

nodaki.hatenablog.com

arXiv APIの使い方 ~ArXiv Bookmark開発記その3~

こんにちは

ArXiv Bookmark開発記第三弾は、arXivから論文情報を検索できる「arXiv API」についてです!

arXiv API | arXiv e-print repository

arXivでは論文検索用のAPIを提供してくれているため今回はこれを利用します。

詳しいマニュアルはこちらから

arxiv.org

arXiv API

この公式マニュアルで紹介されているように Python + feedparserを使ってarXiv APIをサクッと叩いていきます!!

まずはfeedparserをインストール.

pip install feedparser

import feedparser

base_url = "https://export.arxiv.org/api/query?search_query="

# クエリを指定
query = ""

# 検索件数
max_results = 10

# 結果を新しいものから順にソートする
sort_results = "&sortBy=lastUpdatedDate&sortOrder=descending&max_results={max_results}".format(max_results=max_results)

d = feedparser.parse(base_url + query + sort_results)

# entriesに検索結果が格納されている
for entry in d.entries:
    # ここから先の処理は後述

こんな感じでクエリで指定した条件で検索をかけることができます。

クエリには例えばカテゴリーで検索したい場合は、公式マニュアル の"5.3. Subject Classifications" からカテゴリーを選択し、下記のように指定することができます。

# cs.CVの場合
query = "cat:cs.CV"

クエリの細かい指定方法はマニュアルを確認してください。

論文情報の取得

feedparserを使って簡単にAPIを叩くことができたので、ここからは論文タイトルやサマリーなどより詳細な情報を取得するための方法についてです!

取得できる情報は公式マニュアル の"5.2. Details of Atom Results Returned"に書かれています。

では実際のコードで見ていきましょう!!

import datetime

for entry in feed.entries:
    # id
    # 例: 'http://arxiv.org/abs/1909.07581v2' ← ID + v2 みたいに"vn"としてバージョン情報がついているので"v"以前を取り出す
    arxiv_id = os.path.basename(entry.id).split("v")[0]

    # タイトル
    title = entry.title

    # リンクURL
    link = entry.link

    # サマリー. 改行を削除
    summary = entry.summary.replace("\n", "")

    # 第一版提出日時
    # time.struct_time 形式で保存されているのでdatetime形式に変更(https://cortyuming.hateblo.jp/entry/20100919/p1)
    published = datetime(*entry.published_parsed[:6])

    # 更新日時
    updated = datetime(*entry.updated_parsed[:6])

    # バージョン
    version = int(link[-1])

    # 著者
    authors = dict(authors=[author["name"] for author in entry.authors])

    # カテゴリー
    categories = dict(categories=[tags["term"] for tags in entry.tags])

    # コメント
    # コメントがない場合もあるので、try~exceptで処理
    try:
        comment = entry.arxiv_comment
    except AttributeError:
        comment = None

こんな感じで必要な情報は取り出せるはずです!!

まとめ

Python + feedparser があれば簡単に arXiv APIから論文検索をかけることができます。

これで論文情報を取得して必要に応じて表示する感じでサイトを作っていこうかと思います。

続き

nodaki.hatenablog.com