2019年12月25日水曜日

Ryzen 9 + Anaconda + numpy

Windows用AnacondaのnumpyはIntel Math Kernel Library(MKL)という数学演算ライブラリを利用している。というか、MKL以外のOpenBLASなどを使おうとするとすごく大変らしい(MacOSX, Linuxでは可能)。Windows用Anacondaのnumpyを用いると、演算のタスクを複数のコアに勝手に分散して高速化してくれる。しかし、parallel pythonなどで関数単位のジョブを複数のコアに分散させて並列計算する場合、1ジョブの演算タスクは1コア内で完結してくれないと困る。

こういう場合はmkl-service パッケージを使う
> conda install -c anaconda mkl-service


として、各コアに分散する関数の最初のほうに

import mkl
mkl.set_num_threads(1)

として、mklに最小のスレッド数を1にせよと指令を出すと1コア内で完結するようになる。

さらに問題なのは、AMDのRyzen 9 3900xを積んだPCでWindows用Anaconda+numpyを利用するときである。PCを買ってから気づいたのだけど、Ryzen 9はIntelが開発しているMKLと大変相性が悪い。開発中のmfapyはnloptをソルバとして用いているので、

1.下記のように仮想環境mfapyを作成する。
> conda create -n mfapy -c conda-forge nlopt numpy scipy matplotlib

(現在python 3.8.0がインストールされます

2.この記事を参考にmklの機能を止める

> conda install mkl -c intel --no-update-deps
さらに環境変数MKL_DEBUG_CPU_TYPEを設定する。
MKL_DEBUG_CPU_TYPE=5

3.mkl-serviceモジュールを使用できるようにする。
> conda install -c anaconda mkl-service 

こうすると、上記のmkl.set_num_threads(1)を設定することで、演算タスクを
1コア内に完結できるようになる。
どうもRyzen上でも、mkl-serviceによるスレッド数制御は可能らしい。
一方、インテルcpuに特有の命令は2)の操作で殺すことができているようだ。





2019年12月9日月曜日

シラバスの使い方

大学改革の迷走 (佐藤 郁哉 ちくま新書) を読んだ。本書にも書かれているように、「私がアメリカの大学に留学した時はこうだった。」とか、「私が訪問したアメリカの大学ではこのような制度が、、」とか、「話によるとアメリカの大学では特許料の収入が、」などなどの、データに裏付けのない個人的経験に基づく価値判断が、大学改革への取り組みに大きく影響しているのは間違いない。本書においてまず最初に取り上げられるのはシラバスである。本書の筆者もまた、留学先で出会ったシラバスの教育効果に感銘を受け、アメリカ式のシラバスの実践を帰国後に自身でも行っているらしい。
一方、なぜ、アメリカの大学教育現場がシラバスを必要としているのかについての考察が全くないのが興味深い。日本の大学教育現場ではシラバスがないと絶対に困るとは言えない。一方、アメリカでは、シラバスをせっせと作らないと絶対に困る切実な理由が、大学教員にも学生にもきっとあるのではないかと思われる。
アメリカの大学では成績不振者をどんどん退学させるらしく、卒業率は60%程度である(落第すると別の大学に編入したり、就職したりするそうだ。また、お金が足りなくなったとか、あまりにも厳しくてやる気がなくなった。という退学理由も多いらしい。あと、5年6年かかって卒業する例も多いらしい)。このようなシビアな環境では、
・学生は効率的に勉強するために事前に、どのような内容なのか評価基準等について詳細な情報が記載されたシラバスが欲しい。
・良い成績が取れなかった時には、低い評価につながった理由などを教員に問い合わせるだろう。また、「シラバスの内容と実際のクラスの内容が異なっていた。」などの苦情を申し立てることもあるだろう。下手すると訴訟を起こしたりするかもしれない。
・教員が、このような苦情に対応していくには、教育内容および達成目標を明記し、評価基準を明確化する必要がある。あなたは○○という達成目標が達成できなかったので、落第です。と説明する責任を負わされている。
ようするに、「何とか卒業するための情報源としてのシラバス」「落第しそうになった時にケチをつける根拠としてのシラバス」「落第する学生の苦情から身を守るためのシラバス」だったら、まず間違いなく活用が進むだろう。その副次的な結果として高い教育効果が得られる場合があると考えるのが妥当な気がする。
一方、前提となる環境が全く異なる日本の大学では、アメリカの大学と同じスタイルのシラバスを運用する切実な理由はなさそうだ(ときどき成績に文句のある学生が、「私はシラバス通り勉強したつもりですが」という、本来のシラバスの利用法をおこなっているのを見る)。シラバスは、事前に何を教わるのかあらかじめ明記することが必要な、自動車教習所とか英会話学校のような場所では、有用であるのは間違いないだろう。一方、教育ができることを「事前に何を教わるのかあらかじめ明記」できることだけに制限してしまうというのが、シラバスの問題点であることも間違いない。

追記:という話をイギリス出身の方にしたら、そんなわけでもないけどね、、というコメントでした。この記事もまた、「データに裏付けのない個人的経験に基づく価値判断」なのでありましょう。反省。。