前回の記事でChiselの情報収集を行い、Chisel Bootcampを一通りこなせれば、Chiselの大体の概要が把握できそうな感触を得た。
ということで今回はChisel Bootcampを実施していくあたって必要になる各種環境の準備を行っていく。
Chisel Bootcampって
とりあえずChisel BootcampのgithubのREADME.mdの内容からBootcampの目的についてをざっと引用する
あなたのハードウェアデザイン能力をインスタンスレベルからジェネレータレベルに導くためものです。このBootcampはあなたにUCバークレーで開発されたハードウェアデザイン言語でScalaのDSLでもあるChiselを学ぶことが出来ます。
Chiselを書くために必要なScalaについての知識もBootcampを行いながら学び、ハードウェアジェネレータの考えを持つChiselの学習をサポートします。
これを勉強することで以下のことを学ぶことが出来るそうな。
前提とする知識は以下の通り。既存のハード設計の知識と、クラスをサポートしているプログラミング言語の知識で十分。
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リポジトリを見てみたら、場所が変わってる&プロジェクト名も変わってるという状況だった。
- README記載のURL→https://github.com/alexarchambault/jupyter-scala
- 実際のリンク先URL→https://github.com/almond-sh/almond
ただ、説明は"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のディレクトリ構造が表示された。
その中からまずは"1_intro_to_scala.ipynb"をクリックしてみると別のタブで以下のような画面が表示された。画面右上の選択中のカーネルの部分が"Scala"になっていることが見て取れると思う。
ここまででjupyter notebookの動作確認は取れているが、インストールしたalmondを使ったjupyter notebook上でのScalaの実行処理は未確認の状態となっている。
そこで"Variables and Constants - var and val"の項目にあるScalaのコードを実行してみると、以下のようにIn[1]の処理が実行されて、結果がOut[1]に表示された!
これでjupyter notebook上でのScalaの実行も確認が出来た。次の記事から本格的にBootcampの内容を学習していくことにする。