ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

Chisel - Chisel Bootcampの環境構築

スポンサーリンク

前回の記事でChiselの情報収集を行い、Chisel Bootcampを一通りこなせれば、Chiselの大体の概要が把握できそうな感触を得た。

www.tech-diningyo.info

ということで今回はChisel Bootcampを実施していくあたって必要になる各種環境の準備を行っていく。

Chisel Bootcampって

とりあえずChisel BootcampのgithubのREADME.mdの内容からBootcampの目的についてをざっと引用する

あなたのハードウェアデザイン能力をインスタンスレベルからジェネレータレベルに導くためものです。このBootcampはあなたにUCバークレーで開発されたハードウェアデザイン言語ScalaDSLでもあるChiselを学ぶことが出来ます。

Chiselを書くために必要なScalaについての知識もBootcampを行いながら学び、ハードウェアジェネレータの考えを持つChiselの学習をサポートします。

これを勉強することで以下のことを学ぶことが出来るそうな。

前提とする知識は以下の通り。既存のハード設計の知識と、クラスをサポートしているプログラミング言語の知識で十分。

  • VerilogVHDL、もしくは最近の一般的なハードウェア設計に馴染みのあること
  • Pytnon, Java, C++等のモダンな言語のプログラミング経験
  • 新しい物を学ぶ意欲

Setup Instructions

ということでセットアップから。

このBootcampはpythonのjupyter notebook上でScalaを実行できる環境を構築し、その上で公開されているBootcampの各チャプターを実行してChiselを学んでいく。

注意点として挙げられているの以下の2点

  • 既にpython用のjupyter notebook環境が構築されていても、別途javascriptファイルが必要なのでそれをインストールする必要がある
  • 2018年1月時点ではCoursier/jupyter-scalaはJava8を使う必要があるので、Java8がインストールされている必要がある

参考までに筆者の環境(Ubuntu16.04 LTS)では以下のバージョンのJavaが使われていた(apt経由で入っているもの)。

$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

ではインストールを行っていく。上記に記載した通り環境はUbuntuなのでLinuxのインストールガイドに従う。なお、今回の次節から環境立ち上げに際して各種コマンドを実行していくが、その際の実行ログはgistにあげてあるので、必要があればそちらも参照してほしい。

jupyter notebook&jupyter-scalaのインストール

まずはjupyterのインストールから。手順通りだと、システムのpython3にインストールするが、システムのpythonはあんまり弄りたくないので、仮想環境を作成してそちらにインストールしてみる。

$ conda create -n jupyter-scala python=3
$ source activate jupyter-scala
$ pip install --upgrade pip
$ pip install jupyter --ignore-installed
# ここから下がBootcampのLocal Installationの手順
$ git clone https://github.com/jupyter-scala/jupyter-scala.git
$ cd jupyter-scala && ./jupyter-scala

手順通りに上記を実行したらエラーが出て怒られた。

$ cd jupyter-scala && ./jupyter-scala
bash: ./jupyter-scala: そのようなファイルやディレクトリはありません

何事かと思いcloneしたgithubリポジトリを見てみたら、場所が変わってる&プロジェクト名も変わってるという状況だった。

ただ、説明は"A scala kernel for Jupyter"となっており、目的のものになっている。コミットしている方も同じみたいなのでバージョンアップの時にプロジェクト名つけて一新した感じかしら。

ということで、"jupyter-scala"ではなく"almond"をインストールしていくことにする。

almond公式の手順に従い、インストールを行っていく、、のだが、手順として最初に実行するのは以下のコマンドになっている。

$ SCALA_VERSION=2.12.7 ALMOND_VERSION=0.1.9
$ coursier bootstrap \
    -i user -I user:sh.almond:scala-kernel-api_$SCALA_VERSION:$ALMOND_VERSION \
    sh.almond:scala-kernel_$SCALA_VERSION:$ALMOND_VERSION \
    -o almond

説明に"Create a launcher via coursier with"とあるとおり、まずはcoursierを使えるようにしないといけない模様。

因みにcoursierというのは以下のようにScalaの依存ライブラリの解決を行い高速にダウンロードする目的で作られたものみたい。

A Scala library to fetch dependencies from Maven / Ivy repositories

coursier is a dependency resolver / fetcher à la Maven / Ivy, entirely rewritten from scratch in Scala. It aims at being fast and easy to embed in other contexts. Its core embraces functional programming principles.

こちらの方が解説記事を書いてくださっているのでこちらも併せてどうぞ。

あなたの sbt update を爆速にする sbt-coursier の紹介 · GitHub

インストールはgithubの環境をクローンしても良さそうだし、公式ページのコマンドラインのところにあるとおりバイナリだけ引っ張ってきてもいいみたい。今回はバイナリをそのまんま持ってきてPATH通して使うことにする。

$ curl -L -o coursier https://git.io/coursier &&
    chmod +x coursier &&
    ./coursier --help
$ export PATH=$PWD:$PATH

改めてalmondのインストールを実行

2018/10/13追記:Chiselが2.12.7だと動作しないので、Scalaバージョン指定を2.11.12に修正

$ SCALA_VERSION=2.11.12 ALMOND_VERSION=0.1.9
$ coursier bootstrap \
    -i user -I user:sh.almond:scala-kernel-api_$SCALA_VERSION:$ALMOND_VERSION \
    sh.almond:scala-kernel_$SCALA_VERSION:$ALMOND_VERSION \
    -o almond

今度はなんかいっぱいダウンロードして特にエラーメッセージもなく終了した。

その後に生成されたalmondを使ってインストールを実行する

$ ./almond --install
Installed scala kernel under /home/dnn-admin/.local/share/jupyter/kernels/scala

これでalmondのインストールは完了。

Bootcampのクローン〜jupyter notebookの起動

続いてBootcampのクローンを行いjupyter notebookで実行できる環境を整えていく。これはREADMEの手順をそのまま実行するだけ。以下の手順の最後でコピーされているのが注意点として挙げたjavascriptファイルのインストールになる。

git clone https://github.com/freechipsproject/chisel-bootcamp.git
cd chisel-bootcamp
mkdir -p ~/.jupyter/custom
cp source/custom.js ~/.jupyter/custom/custom.js

ここまでの手順を実行した後、jupyter notebookを起動する

$ jupyter-notebook 
[I 13:23:59.696 NotebookApp] Serving notebooks from local directory: /home/dnn-admin/workspace/hw/study/2000_chisel/300_chisel_bootcamp/chisel-bootcamp
[I 13:23:59.696 NotebookApp] The Jupyter Notebook is running at:
[I 13:23:59.696 NotebookApp] http://localhost:8888/?token=7ed1634c46f9c05bef30d5962b542693b88a827f58671a57
[I 13:23:59.696 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 13:23:59.708 NotebookApp] 
    
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=7ed1634c46f9c05bef30d5962b542693b88a827f58671a57
[I 13:24:00.191 NotebookApp] Accepting one-time-token-authenticated connection from 127.0.0.1

上記を実行するとブラウザが立ち上がり、以下のようにクローンしたBootcampのディレクトリ構造が表示された。

f:id:diningyo-kpuku-jougeki:20181006133909p:plain
jupyte notebook立ち上げ後のブラウザ画面のキャプチャ

その中からまずは"1_intro_to_scala.ipynb"をクリックしてみると別のタブで以下のような画面が表示された。画面右上の選択中のカーネルの部分が"Scala"になっていることが見て取れると思う。

f:id:diningyo-kpuku-jougeki:20181006134742p:plain
1_into_to_scala.ipynbの表示画面

ここまででjupyter notebookの動作確認は取れているが、インストールしたalmondを使ったjupyter notebook上でのScalaの実行処理は未確認の状態となっている。

そこで"Variables and Constants - var and val"の項目にあるScalaのコードを実行してみると、以下のようにIn[1]の処理が実行されて、結果がOut[1]に表示された!

f:id:diningyo-kpuku-jougeki:20181006134110p:plain

これでjupyter notebook上でのScalaの実行も確認が出来た。次の記事から本格的にBootcampの内容を学習していくことにする。