fortran66のブログ

fortran について書きます。

【メモ帳】Fortran 色々

gfortran 14

gcc 14 変更点一覧から gfortran 分を抜き出してくれています。

変更点は、もっぱら OpenMPGPU への offload 関連でしょうか。

fortran-lang.discourse.group

gcc.gnu.org

Ubuntu 24.04 にすると、デフォルト設定の apt で gfortran-14 を install できます。標準は gfortran-13 のようです。

LLM in fortran

あとで試してみたいです。

Hackable large language model inference in pure Fortran.

github.com

Ferrite - Simple, lightweight transformers in Fortran

github.com

【メモ帳】Ollama を Intel 内蔵 GPU で動かす

IPEX-LLM

IPEX-LLM の手引きに従い、12th Gen Intel(R) Core(TM) i7-1260P の内蔵 GPU を用いて Ollama によって LLM(大規模言語モデル)を Windows 11 上で動かします。

Ollama はバックエンドとして llama.cpp を用いており、これを Intel oneAPI の C++ コンパイラを使ってコンパイルすることで、GPU 利用を実現します。

したがって、まず ipex-llm をインストールしたうえで llama.cpp の設定を行い、引き続いて Ollama の設定に進むことになります。

ipex-llm.readthedocs.io

ipex-llm の例題が動いたところで、次に llama.cpp のインストールに移ります。

ipex-llm.readthedocs.io

注意点:第一歩目として conda と pip の合わせ技が出てくるのですが、pip が動かず頭を抱えてしまいました。

これは以下のサイトに解決方法が書いてありました。

zenn.dev

dllファイルが無いことが原因 /Library/binからffi.dll ffi-7.dll ffi-8.dllをコピーして /env/<new-env>/Library/binにペーストする。

これによって、pip が正常に動きます。

conda create -n llm-cpp python=3.11
conda activate llm-cppdounyu
pip install dpcpp-cpp-rt==2024.0.2 mkl-dpcpp==2024.0.0 onednn==2024.0.0 # install oneapi
pip install --pre --upgrade ipex-llm[cpp]

llama.cpp のソース一式を git clone してやります。

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

ここで、Anaconda prompt (miniconda3) を管理者権限で起動して、バッチファイルを実行します。

init-llama-cpp.bat

本当は例題でうまく動くか見た方がいいでしょうが、mistral-7b-instruct-v0.1.Q4_K_M.gguf のファイルサイズが大きいので、次の ollama インストールに移っても罰は当たらないかと思います。

ipex-llm.readthedocs.io

先ほどと同じく バッチファイルを管理者権限で実行します。

init-ollama.bat

ここまで順調に行っているならば、後は言語モデルをダウンロードしてローカルで言語モデルを実行できます。

実行

ひとつの anaconda prompt で ollama serv でサーバーモードで立ち上げて、もう一つ別の anaconda prompt で ollama pull phi3 をして microsoft の slm(小型言語モデル)をダウンロードして、ollama run phi3 でこれを実行できるはずです。

phi3 を実行してみました。GPU の利用率が上がっているので、ちゃんと GPU で計算しているようです。

【メモ帳】Tiobe 月旦評 2024年 5月号

Fortran 10位維持 評論は Fortran について

May Headline: Fortran in the top 10, what is going on?

I have received a lot of questions why Fortran entered the top 10 again after more than 20 years. The TIOBE index just publishes what has been measured. >There are for instance more than 1,000 hits for "Fortran programming" on Amazon, which is the leading company in books. New cool languages such as Kotlin and Rust, barely hit 300 books for the same search query. So, what is going on? First of all, the Fortran language is still evolving since its inception in 1957. Less than half a year ago, the new ISO Fortran 2023 definition was published.

 

The main reason for Fortran's resurrection is the growing importance of numerical/mathematical computing. Despite lots of competitors in this field, Fortran has its reason for existence. Let's briefly check the competition out. Python: choice number one, but slow, MATLAB: very easy to use for mathematical computation but it comes with expensive licenses, C/C++: mainstream and fast, but they have no native mathematical computation support, R: very similar to Python, but less popular and slow, Julia: the rising new kid on the block, but not mature yet. And in this jungle of languages, Fortran appears to be fast, having native mathematical computation support, mature, and free of charge. Silently, slowly but surely, Fortran gains ground. It is surprising but undeniable.

  --Paul Jansen CEO TIOBE Software

www.tiobe.com

what is going on?


www.youtube.com

Infoworld

Fortran popularity rises with numerical and scientific computing

67-year-programming language ranks in the top 10 of the Tiobe index of programming language popularity for two months running.

www.infoworld.com

Cloudflare Workers

llvm flang でやってます。

blog.cloudflare.com

【メモ帳】LFortran で WebAssembly

Fortran で WebAssembly

昨日 twitter で LFortran 公式が LFortran が吐いた WASM での Web 利用についてつぶやいていたので、再現してみます。

LFortran は、WASM を吐き出すオプションをつけてソースからコンパイルする必要があります。

lfortran.org

元々は以下のページの llvm flang による試みに刺激されたようです。

gws.phd

手順メモ

はじめ M1 Mac でやってみたのですが、assert のエラーをどうしても乗り越えられないので放棄しました。河岸を変えて WSL 上の Ubuntu 22.04 でやって再現できました。

基本的には LFortran 公式の Build from Git on Windows with WSL の項目に従い、conda 環境を準備します。そうしないと意味不明なエラーに襲われ続けます。

docs.lfortran.org

conda create -n lf -c conda-forge llvmdev=11.0.1 bison=3.4 re2c python cmake make toml
conda init bash

conda activate lf
sudo apt update
sudo apt-get install build-essential
sudo apt-get install zlib1g-dev libzstd-dev
sudo apt install clang
git clone https://github.com/lfortran/lfortran.git
cd lfortran

./build0.sh

cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_LLVM=yes -DCMAKE_INSTALL_PREFIX=`pwd`/inst - DWITH_RUNTIME_STACKTRACE=yes -DWITH_TARGET_WASM=yes -DWITH_TARGET_X86=yes -DWITH_TARGET_AARCH64=yes .

make -j 8
make install

ここで cmake の引数に、wasm を吐き出すように、コンパイラのターゲットを与えます。

-DWITH_TARGET_WASM=yes -DWITH_TARGET_X86=yes -DWITH_TARGET_AARCH64=yes

fortran-lang.discourse.group

また、以下の行も足しておきます。これをしないと test を通りません。 

DWITH_RUNTIME_STACKTRACE=yes

cmake のところで zlib が無いとかエラーメッセージが出ましたが、それをググって必要なものをインストールすれば何とかなります。

ctest
./run_tests.py

出力例

~/lfortran/src/bin/lfortran --version
LFortran version: 0.35.0-106-gda0a07acb
Platform: Linux
Default target: x86_64-unknown-linux-gnu


~/lfortran/src/bin/lfortran --print-targets

  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_32 - AArch64 (little endian ILP32)
    aarch64_be - AArch64 (big endian)
    arm64      - ARM64 (little endian)
    arm64_32   - ARM64 (little endian ILP32)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64

emscripten :WASM に必要

以下のページに従ってスルスル行けます

emscripten.org

# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git

# Enter that directory
cd emsdk

# Download and install the latest SDK tools.
./emsdk install latest

# Make the "latest" SDK "active" for the current user. (writes .emscripten file)
./emsdk activate latest

# Activate PATH and other environment variables in the current terminal
source ./emsdk_env.sh

注意:ここで起動時に自動で読み込むようにするにはこうしろ!と画面に出るのですが、それをやると .bash_profile に書き込みをします、しかし副作用で conda のパスがくるってにっちもさっちも行かなくなるので、やらない方が身のためです。その代わり毎回起動後 source ./emsdk_env.sh をすることにします。 

実際の再現

github.com

git clone https://github.com/lfortran/mnist-classifier-blas-wasm.git
cd mnist-classifier-blas-wasm

(ランタイムのオブジェクトファイルの位置は ~/lfortran/src/runtime/lfortran_runtime_wasm_emcc.o です。)

 ~/lfortran/src/bin/lfortran  -c classifier.f90 --generate-object-code --rtlib --target=wasm32-unknown-emscripten
 
emcc --target=wasm32-unknown-emscripten -sSTACK_SIZE=50mb -sINITIAL_MEMORY=256mb -o www/mnist.js classifier.o ~/lfortran/src/runtime/lfortran_runtime_wasm_emcc.o --no-entry -sEXPORTED_FUNCTIONS=_classifier,_malloc,_free

色々メッセージが出ますが無視で。 出力は ./www の中身の一部を置き換える形で出ます。

cd www
python -m http.server 8000

ブラウザから http://localhost:8000 で出るはず。

結果の再現ができたので、いずれ何かやってみたいと思います。

【メモ帳】Microsoft Phi-3 ローカル実行してみる

Experia Z4 Tablet で ollama / Phi-3 ローカル実行

先日 Microsoft が端末上で局所実行可能な小規模言語モデル(slm)Phi-3 を公開しましたが、YouTube を見ていたところ ollama というものを使うと簡単に試すことが出来るという事だったので、試してみることにしました。

手順は検索して出てきた以下のページに従って行いました。

zenn.dev

実行端末には Sony Experia Z4 Tablet を用い、UserLAnd 上の Ubuntu 20.04 環境を用いることにしました。

ollama.com

curl -fsSL https://ollama.com/install.sh | sh

上記コマンドで、問題なくダウンロード&インストールが済みました。

コンソール2つ開いて、一つではサーバーモードで起動し、もう一つで Phi-3 を起動します。

ollama serve
ollama run phi3

phi-3 は 2Gbyte 強のデータファイルをダウンロードした後に起動してプロンプト >>> を出します。メモリーはそれほど消費しません、しかし Z4 には計算の荷が重いようで1文を返すのに 10 分ぐらいかかります。CPU は余り並列利用していないようなので並列化できればもう少しはましかもしれません。まぁ Z4 は、昨今の Android アプリもまともなスピードで応答できないのでしょうがないですねw

音楽を一曲くらい聞いているうちに終わるかな?と思いましたが、実際はアルバム一つ分くらい待つ必要がありました。

上田麗奈さんは今期プリキュアで猫屋敷とか言う面白キャラを演じられているようなのですが、出遅れてまだ見てません。近年 社会派プリキュアが多くてチェックしていなかったのですが、今期は動物路線に軌道修正されて面白そうです。

【メモ帳】OpenAI も MPI 利用

MPI C++ bindings を止めた訳

MPI は元々は C/C++ と FORTRAN77/Fortran90 の4者の API/binding がありましたが、C++ と FORTRAN77 は脱落し、Fortran2008 が入ってきています。

MPI で C++API を止めて C に統一した理由を、昔 W. Gropp の書いた MPI の20年だか25年だかの懐古記事で見た気がするので AI 先生に聞いたのですが、別の Gropp の記事などから理由を列挙してきて、そんなの知らんと言うので、私の記憶の方が Hallucination なのか不安になってきました。

Gropp の去年の記事によると、OpenAI も MPI によって並列コンピューティングをしているようです。

www.ncsa.illinois.edu

openai.com

記憶の Hallucination というと、英人作家 E. ウォー の「ギルバート・ピンフォールドの試練」の冒頭部分で、ウォー本人の実経験に基づくらしい酒の飲み過ぎで記憶が混濁して滔々と述べたことが事実と全然違っていて当惑する場面を思い出します。身につまされてゾッとして怖くなりますw

夜中に「漕げよマイケル」の幻聴が聞こえてくる場面も、もう笑えない感じです。


www.youtube.com

また V. ナボコフの「青白い炎」で、口臭(halitosis)を注意してくれようとしれたメモを hallucination と間違える場面も思い浮かびます。「青白い炎」は日榮社の注釈付きテキスト本のような体裁の小説ですが、内容的にはネット時代の妄想押しかけ異常者を予見したようなところがあって、今にして思い出すとゾッとして怖くなりますw

【寝言】春宵一刻値千金

春の夜

最近暖かくなって草木が伸び、夜の空気も心地よく感じられます。

気分的に「愚かなり我が心」です。


www.youtube.com

最近の気分いい音楽

Otto Sieben - Terence Yucca Band - Curley Shirley


www.youtube.com

3C 政策 3B政策

新刊で奥山真司著『世界最強の地政学』が出ていたので買ってみました。読みやすい本で、今後の支那問題にどう対処すべきかを考える上でも示唆に富んでいると思いました。

この本の本筋からは外れるのですが、途中出てきた20世紀初頭のイギリス 3C 政策、ドイツ 3B 政策の語を見て、高校世界史ではよく見るものの、英米の本で余り見たことが無いなとふと思い、英語で何と云うのかとネット検索してみましたが日本語の受験世界史ばかりが出てきます。

AI 先生に聞いてみたところ、イギリス側については、セシル・ローズがカイロ=ケープタウンを鉄道で結びつける構想を述べていたという事で、それに当時英領であったインドのカルカッタを結びつけるのはおかしくはない式の返事が返ってきて 3C 政策という単語は見当たらないようなことを示唆されました。またドイツ側についてはベルリン=バクダッドの語は当時よく出てきたがビザンチウムはあまり無い、3Bというなら ベルリン=バクダッド=バスラの方が適切だというような事を返されました。

AI のいう事なので、どこまで信じていいのか分かりませんが、記憶に留めておきたいと思います。

怒りを紙に書いて破る

名大で、イライラを紙に書いたあとシュレッダーにかけると怒りが消える、という研究がされたようです。

ジョン・フォード監督、ジョン・ウェインモーリン・オハラ主演の映画「静かなる男」で、敵役のおっさんが腹が立った奴の名前を字の書ける息子に手帳に書かせてそのページを破って捨てさせて溜飲を下げていた場面を思い出しました。

アイルランド人の奇妙な性格を描いた映画で、宮崎駿の「天空の城ラピュタ」の殴り合いのシーンなどの元ネタと思います。ラピュタの炭鉱町は同じジョン・フォードの『我が谷は緑なりき』から、ロボットの怪光線が教会の塔を吹き飛ばすのは H.G.ウェルズの「宇宙戦争」の小説描写から採ったものだと思います。

gigazine.net


www.youtube.com