学生の学習時間を増やす工夫を - TAMAGAWA · を使い、従来型の講義形式の授業から、学生が自ら積極的に参加する授業が展開できます。
Elixir/Phoenix/Nervesの最新動向と Hastega 改め Pelemay を 中核 … · 自己紹介...
Transcript of Elixir/Phoenix/Nervesの最新動向と Hastega 改め Pelemay を 中核 … · 自己紹介...
Elixir/Phoenix/Nervesの最新動向と Hastega 改め Pelemay を 中核とする今後の研究開発方針
北九州市立大学 山崎 進
�1© 2018 Susumu Yamazaki
本発表核心部分(構想図)は CONFIDENTIAL です 核心部分については資料を公開する予定なしです核心部分の写真・SNS拡散等もご遠慮ください 前座部分については,写真・SNS拡散OKです
�2© 2018 Susumu Yamazaki
自己紹介•山崎 進 (やまざき すすむ)
• 北九州市立大学 国際環境工学部 准教授
• ナッジ社会実装研究センター センター長
• 学生・就職支援担当
• Personal Vision Co-Creator
• KK-SHiFT
• Elixir 推し / fukuoka.ex / Pelemay
• 技術相談,共同研究依頼,進路相談,適職診断など,随時受付ます
3© 2019 Susumu Yamazaki
1
Elixir、マイナー言語だけど、地味に生活を支えてます
Elixirの採用事例
�4© 2018 Susumu Yamazaki
Elixir (エリクサー) Pelemay (ペレメイ)が求められる背景とは?
�5© 2018 Susumu Yamazaki
情報量爆発
2013年にデータの総量が4.4ゼタバイト 2020年に44ゼタバイトに達する見込み
�6© 2019 Susumu Yamazaki
情報量爆発
2017年に毎月122エクサバイト増加 2022年に毎月396エクサバイト増加見込み
情報の増加量が加速
�7© 2019 Susumu Yamazaki
5Gで通信速度は向上する• 3.2Gbpsを超える通信 (NTTドコモ公式)
• 500Gbpsを超える通信を達成した実験結果あり (英語Wikipedia)
• 4Gより高い周波数を用いることから,基地局からの最大距離が短い→基地局を高密度に設置しないといけない
• 1-30 ms 程度のレイテンシ(英語Wikipedia)
�8© 2018 Susumu Yamazaki
計算能力が追いつかない
Hennesy & Patterson2003年にCPUクロック周波数は頭打ちに
�9© 2019 Susumu Yamazaki
なぜクロック周波数を伸ばせないか?
•クロック周波数の増大は消費電力と発熱量の増大を招く
•電源供給量と熱伝導率および冷却能力が追いつかない
• 2~3GHz程度で常温で安定動作する限界を迎えている
•競技用オーバークロックでは液体窒素等に浸ける等により8GHz以上で動作させている
•通常のPCやサーバーでは常温稼働できることが要件
�10© 2019 Susumu Yamazaki
かわりにコア数が増加
•2003年以降のプロセッサの進化 • ×クロック周波数 • ○コア数
11© 2019 Susumu Yamazaki
Intel Core 2Extreme X6800 2006
Clock 2.93GHz
# of Cores 2
Intel Core i97980XE 2017
Clock 2.6GHz
# of Cores 18
GPU
•最新 GPU は1.5GHz 以上のクロック周波数3,000以上のSIMDコア
Kilocore•MIMD方式1000コア (cores)
• 12メモリモジュール (memory modules)
• 32nm プロセスルール (process rule)
• 最大 1.78GHz (1.1V) (maximum)
• 0.9V 時 1.24GHz 17mW5.3 pJ / 命令 (low energy)
• Intel i7 や NVIDIA GPU と比べ,1.1V時スループット4.3倍以上, エネルギー効率9.4倍以上
13© 2019 Susumu Yamazaki
B. Bohnenstiehl et al., "KiloCore: A 32-nm 1000-Processor Computational Array," in IEEE Journal of Solid-State Circuits, vol. 52, no. 4, pp. 891-902, April 2017.
The Cerebras Wafer-Scale Engine (WSE)
•ウェハーサイズのチップ
• 1.2兆個のトランジスタ数
• 1辺が 215 mm
• 18GBのオンチップメモリ (on-tip memories)
• 40万コア (cores)
• 消費電力 15kW
14© 2019 Susumu Yamazaki
© 2019 Cerebras systems.
今後の半導体トレンド•メモリの高速化がプロセッサの高速化に追いついていない •コア数は今後も増大し続ける •半導体プロセス微細化は限界を迎えつつある •他の各種集積技術により回路規模は当分増大の余地がある •回路長が今まで以上に長くなる •今まで以上にメモリアクセスと光速が律速になる •共有メモリ衝突,フォン・ノイマン・ボトルネック •回路全体でクロックを同期させることが不可能に •共有型アーキテクチャよりも分散型アーキテクチャ優位
�15© 2019 Susumu Yamazaki
情報量増大+通信速度向上→求められる計算量増大
クロック周波数伸び悩み+コア数増大 →計算量を増やすには並列処理が必要
�16© 2018 Susumu Yamazaki
でも並列処理を書くのはけっこう面倒ですよね?
�17© 2018 Susumu Yamazaki
Elixir + Flow + Pelemay
�18© 2018 Susumu Yamazaki
Shared Data
Core #1 Core #2
3.14
従来の言語の問題点
•複数のコアでデータを共有していると仮定する
19© 2019 Susumu Yamazaki
Shared Data
Core #1 Core #2
3.14→1.5
破壊的更新がボトルネック
•あるコアが共有データを破壊的更新した場合
•他のコアに通知して処理を止める必要がある
•速度低下につながる
•コア数が増えれば増えるほど深刻な影響をもたらす
20© 2019 Susumu Yamazaki
Update Notify
Stop Processing
Shared Data
Core #1 Core #2
3.14
Elixir は全てがイミュータブルである
•Elixirではデータの破壊的更新が発生することはない
•他のコアの処理を止めなくて良い
•コア数が増えても処理能力を維持できる
➡並列性に優れる
21© 2019 Susumu Yamazaki
Don’tUpdate
Don’t need tostop processing
© 2018 Susumu Yamazaki
• 右のコード例
• 1から1,000,000までのリストに
• 各要素に foo を適用(x2)
• 各要素に bar を適用(+1)
• した結果を得る
• 破壊的更新なしでデータを上から順に変換していく「データ変換」パラダイム
• 本質美なので「禅」
1..1_000_000|> Enum.map(&M.foo(&1)) |> Enum.map(&M.bar(&1)) defmodule M do def foo( n ), do: n * 2 def bar( n ), do: n + 1end
Elixir Zen スタイル
�22
© 2018 Susumu Yamazaki�23
• 最新のCPU/GPUはマルチコアを超えてメニーコア
• このコードは各要素間に依存関係がなく最大1,000,000並列で実行可能
簡単に並列化可能!
1..1_000_000|> Enum.map(&M.foo(&1)) |> Enum.map(&M.bar(&1)) defmodule M do def foo( n ), do: n * 2 def bar( n ), do: n + 1end
Flow•Elixir の作者 José Valim が2016年に作った並列処理ライブラリ
•若干の記述を足すだけでマルチコアCPUを活用
•複雑な処理を並列化する場合に効果を発揮(単純な処理では効果が出ない)
•要素の順番が入れ替わることがある点に注意
単一CPUで処理
def func do 1..1_000_000 |> Enum.map(&foo(&1)) |> Enum.map(&bar(&1)) end
並列処理
def func do 1..1_000_000 |> Flow.from_enumerable |> Flow.map(&foo(&1)) |> Flow.map(&bar(&1)) |> Enum.to_list end
Pelemay•山崎と久江が2018年から開発しはじめた並列処理系
•若干の記述を足すだけでCPUのSIMD命令を活用
•現在は数値四則演算のみサポート,将来はElixir全言語仕様をサポート予定
•マルチコアをサポートしていない現在は,まだFlowとの使い分けが必要
•現時点ではFlowと併用すると遅くなる •将来はCPU/GPUをフル活用予定
単一CPUで処理
def func do 1..1_000_000 |> Enum.map(&foo(&1)) |> Enum.map(&bar(&1)) end
並列処理
defpelemay do def func do 1..1_000_000 |> Enum.map(&foo(&1)) |> Enum.map(&bar(&1)) end end
デモンストレーション当日は Pelemay を実行させてみました
�26© 2018 Susumu Yamazaki
現時点での活用の方向性• Flow を使って並列スクレイピング
• Flow と OpenCV を使って並列画像処理
• Pelemay を使って並列算術計算
• Elixirの行列計算ライブラリやディープラーニングライブラリへのPelemayの適用を進めています
• Pelemay はまだまだ機能が足りないですが,研究開発を精力的に進めています!
�27© 2018 Susumu Yamazaki
おまけ: Nerves について• ElixirConf 2019 - Day 2 Morning Keynote - Justin Schneckhttps://youtu.be/fRP_dVton7o
• Nerves の本質の1つはイミュータブルファイルシステム
• 動的に変更するデータは全てデータベースに集約
• matsumotory “超個体型データセンターOSを目指した選択性を持つコンテナ実行基盤” にて, Nerves やそれに類するイミュータブルファイルシステムを評価してみると良いかと思います
�28© 2018 Susumu Yamazaki
核心部分についてはごめんなさい 現時点では資料非公開です
m(__)m
�29© 2018 Susumu Yamazaki