読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



共有メモリ型並列計算機上での強化学習 学習時間が変だ・・・

強化学習

共有メモリ型並列計算機上での強化学習 複数CPU(2003/8/1)の続き。前の結果を見ると、1スレッドと2スレッドの間は10倍遅くなっているが3スレッドにすると速くなっている。何か怪しかったけどさらにスレッドを増やして測定してみた。

学習曲線は

f:id:aidiary:20050813195837g:plain

学習収束までの時間は

スレッド数 1 2 4 8 16 32 64 128
収束エピソード 7800 3930 2000 1000 700 600 150 130
収束までの時間(秒) 5.84 54.19 27.81 17.60 8.19 5.30 2.93 2.05

スレッド1個のときは5.84秒だけど2個並列に動かすと54.19秒と10倍遅くなる。これがなぜだか分からなかったが、キャッシュミスのせいではないかというアドバイスを頂いた。

スレッド1個で1つのCPUだけ使っている場合は共有メモリの内容を書き換えてもキャッシュに保存されるため、キャッシュミスが起きづらく速い。一方、スレッド2個並列に動かして複数のCPUが使われるようになると複数のCPUが共有メモリへの書き込みをするため、CPUのキャッシュと共有メモリの内容が合わずキャッシュミスが頻発することになる。メモリのアクセス時間はキャッシュのアクセス時間より遅いため上のように10倍遅くなってしまう。行動価値テーブル書き換えのため頻繁に共有メモリに書き込んでいたのでこの理由は納得できた。

スレッドをさらに増やすとキャッシュミスによるオーバヘッドより収束エピソードが早いことの方がきいてくるため時間が早まっているのだと考えられる(んだけどどうなんだろうか)。

とりあえず1スレッドのときより学習時間を減らすことが目下の目標だったので達成できた(かもしれない)。でも速くなったといっても2倍くらいだし。それに8CPUしかないのに128スレッドって・・・何か変。