「HTML5 + PHP + MySQL + JavaScriptによるWebアプリケーション開発入門」更新

 静岡理工科大学最後の非常勤講義「大学院・ネットワークシステム論」で使用するため,久々にテキストの書式更新を行いました。Bootstrap 5.3系統に対応した他,字句の微修正を行っています。ソースコードも整理して提示する予定でしたが,適宜,チェックしながら公開しようと考えています。

シラバス(予定)

 

AIの普及で,スクラッチからプログラミングをする流儀が廃れようとしています。嘆かわしい,というより先に,物忘れが酷くなってきた私自身がCodexやClaude codeに頼っている有様ですから,Vibeコーディングができるという前提で試行錯誤の幅を広げていくのがAI時代のソフトウェア構築の正しい姿でしょう。

 ということで,ソースコードをひたすら手打ちで頑張る,という流儀からの脱却を図って発展させていければと思う今日この頃です。4月からの3か月間,お付き合い下さい。>受講生ご一同様

AI Precision Playground公開

MPFRgraphを改良し,AI時代に使用される浮動小数点数の解説全般をできるよう,ChatGPTとClaudeに大幅改善してもらいました。

https://kd-tklab.na-inet.jp/mpfrgraph/ai_prec_playground.php

オートデモ機能を付加したので,ぼーっとしていても一通りの機能を見ることができます。

卒研テーマ名) ローカルLLMの性能評価

 とりあえずその時点の手持ちの環境で実行可能で,かつできるだけ安く(ライセンス代,電気使用量)使用できるものを選別する。プログラミングなどの特定な目的があるならそれに特化して強いLLMを複数選択して総合的なベンチマークテストを行って性能評価を行う。Google ColabやAWSで無料で使える程度か,研究室にある型落ちマシンを使っての評価が中心かしらね。

第0講 高性能計算が目指すもの

 ユーザが求める処理があり,その結果得られる数値がユーザが満足する精度(有効桁数)に到達するまでの処理時間をいかに短くできるか。これが本書で我々が目指す目標であり,それを達成するための情報処理的,数値解析的な手段を学ぶことになる。問題設定と解決手段を考えること,それが高性能計算(High Performance Computing, HPC)研究の核である。

 まずは具体的な問題を複数提示し,それをプログラムで実行して問題設定を理解するとから始めたい。そのためにはまず下記の2つのプログラミング環境を整えておく必要がある。

Pythonエコシステム:Pythonインタプリタを中心に構築されたモジュール類から構成される開発環境。インタプリタであるため,高速性には難があるが,多くの信頼できるモジュールが開発されており,その上にPyTorchをはじめとする現在のAI基盤が構築されていることから,まずはPythonスクリプトで例題を提示して理解の緒に就くようにしたい。

C/C++開発環境:ソフトウェアの高速性は,いかにCPUやGPUといったハードウェアの機能を最大限発揮させることができるか,ということに依存している。一番いいのはハードウェアが直接理解できる機械語と一対一で対応するアセンブラ言語を使うことであるが,CPUやGPUごとに異なるため,ハードウェアに依存する率が高くなり,可読性も低いことからメンテナンス性にも難がある(引継ぎが難しい)。それよりはもっと汎用的に記述でき,しかも機械語に変換できるレベルのコンパイラ言語を使用することで,ある程度の高速性と可読性を維持できる。FORTRAN以来,さまざまなコンパイラ言語が発明されてきたが,現状ではC/C++が一番蓄積が多く,使用者が多いので,Pythonでは不足する高速性を追求する際にはC/C++を使用して記述する。WindowsでGUIで使用できる開発環境もあるが,本書ではLinux環境におけるCUIをベースとして使用することを想定している。

 両者を同じように使用できるよう,Windowsにおける標準的なLinux環境であるWSLでPythonもC/C++も実行するものとする。2026年4月現在の最新版であるUbuntu 24 LTSを使用し,Pythonは3.12.3,GCCは13.3以上で実行できるものとする。Pythonモジュールはpipコマンドで追加できるものを標準的に使用する。まずはNumPy, SciPy, matplotlibはインストールしておいて欲しい。

卒研テーマ名)JuliaライブラリMultiFloats.jlとBNCmatmulとの性能比較

IEEE倍精度(binary64)ベースのマルチコンポーネント方式多倍長精度浮動小数点演算の性能比較を,JuliaMultiFloats.jlBNCmatmulに対して行う。異なる言語系でどうすれば正確かつフェアな比較が行えるかを検討し,基本線形計算BLASを実装して計算時間の比較を行い,メリットとデメリットをまとめる。指導教員の研究に沿った内容なので,自分の考えも付加してもらえるとありがたい。

卒研テーマ名)DGX Spark (GB10)におけるBLASベンチマークと混合精度反復改良法実装への応用

DGX Spark (GB10)は20コア Arm CPUとBlackwell GPUを搭載し,両方からアクセスできる128GB RAMを持ったAI開発用ワークステーションである。主としてNVFP4(4bit浮動小数点数)を用いたAIベンチマークは多く見かけられるが,binary32 (float32)やbinary64 (float64),そしてCUDAがサポートしているbinary128 (float128)の性能については定かではない。非公式情報ではbinary32が29.71TFlops,binary64が464.3GFlopsと,64:1の性能差があるというが,NVIDIAは否定している

とりあえずCUDAのcuBLASがサポートするSGEMM(binary32)とDGEMM(binary64)の速度を計測し,CPU上ではOpenBLASのSGEMMとDGEMMを実行して速度計測を行う。OpenBLASはArm Neon(128-bit SIMD)とSVE2(~512-bit SIMD)対応しているので,その差もついでに確認しておく。

その結果をもって,CPUとGPUをどのように使えばbinar32-binary64混合精度反復改良法が高速に実現できるかを検討する。

HPCシステムズのベンチマーク結果が出たので,こちらを参照しながら自分の環境でも確認すること。

卒研テーマ名)QD, GQDへの3倍精度実装の追加と高性能化

Branch-freeアルゴリズムをTDとQDに取り入れたCPU用,GPU(CUDA)用のマルチコンポーネント方式のライブラリを構築し,ベンチマークテストを行ってGitHubにオープンソースとして公開する。MPLAPACK/MPBLASに組み込めることが望ましい。前の奴のブラッシュアップ版。SIMD化,CUDA化とベンチマークテストも含めて二人以上で取り組んでも可。余裕があれば,binary64ベース(DD, TD, QD)だけではなく,binary32ベースのDS, TS, QS実装も欲しい。

参考1)CPU上での多倍長精度浮動小数点演算実装

参考2)GPU(CUDA)上での多倍長精度浮動小数点実装

  • マルチコンポーネント型
  • 整数ベースの多数桁方式

卒研テーマ名)ブランチフリーアルゴリズムを用いたQD,GQDライブラリの高速化

 Branch-freeアルゴリズムを用いて,QDGQDライブラリのうち,QD精度演算の高速化を行って高速化の効果を調べる。その後,TD精度演算をクラスとして実装し,同様にベンチマークテストを行ってDD,TD,QD精度で比較を行う。

 オリジナル論文ではTemplate機能を用いたSIMD化と線形計算高速化を行っているので,同様に比較検討を行う。

「AI時代の高性能計算入門」目次

  • 初めに
  • 目次
  • 第0講 「高性能計算」で目指すもの・開発環境の準備
  • 第1講 コンピュータアーキテクチャと演算
  • 第2講 浮動小数点演算の基礎
  • 第3講 多倍長精度演算技法
  • 第4講 基本線形計算とLAPACK/BLAS
  • 第5講 基本線形計算の並列化技法
  • 第6講 無誤差変換技法と尾崎スキーム
  • 第7講 固有値・固有ベクトル計算(中間レポート1)
  • 第8講 Pythonにおける浮動小数点演算
  • 第9講 深層学習とPyTorch
  • 第10講 PyTorchとHugging Face
  • 第11講 PyTorchベンチマーク(中間レポート2)
  • 第12講 Juliaによる高性能計算
  • 第13講 非線形計算問題(最終レポート)