SuiteSparse,CXSparse, BLAS, LAPACK, libmetis のインストール(Ubuntu 上)
- AMD: approximate minimum degree ordering(対称行列に対するフィルイン低減の並び替え)
- CAMD: constrained approximate minimum degree ordering
- COLAMD: column approximate minimum degree ordering
- CCOLAMD: constrained column approximate minimum degree ordering
- CHOLMOD: 疎行列のスーパーノーダル Cholesky 分解,および分解の更新・ダウンデート.BLAS,LAPACK を必要とし,METIS を任意で利用する
- CXSparse: CSparse の拡張版(複素行列,32 ビット/64 ビット整数に対応).実利用では CSparse ではなく CXSparse を用いる
- UMFPACK: 疎行列のマルチフロンタル法による LU 分解(sparse multifrontal LU factorization)
- KLU, BTF: 回路シミュレーション向けの疎 LU 分解とブロック三角化
- SPQR (SuiteSparseQR): 疎行列の QR 分解
- SuiteSparse_config: 各パッケージ共通の設定・共通関数のライブラリ(かつて UFconfig と呼ばれていたもの)
- GraphBLAS, LAGraph, Mongoose, SPEX, ParU, LDL, RBio
AMD,COLAMD などの並び替え(ordering)は,Cholesky 分解や LU 分解で生じるフィルインを減らすための前処理として使用される.
METIS は,グラフ分割とフィルイン低減の並び替えを行うソフトウェアである.SuiteSparse 7 系では,METIS を改変したものが CHOLMOD/SuiteSparse_metis として CHOLMOD ライブラリに組み込まれており,SuiteSparse を独自ビルドする場合に METIS を別途ビルドする必要はない.
各ソフトウェアのライセンスは,パッケージごとに異なる(GPL,LGPL,Apache-2.0 など).利用条件は利用者自身で確認すること.ライセンスは SuiteSparse の LICENSE.txt および各パッケージのディレクトリで確認できる.
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now
C/C++ コンパイラー,make,パッケージツール,その他のインストール
端末で,次のコマンドを実行する.
SuiteSparse 7 系および Ceres Solver 2.2 のビルドには C++17 に対応したコンパイラーと CMake 3.22 以上が必要である.Ubuntu 24.04 LTS の標準の gcc/g++ および cmake はこの条件を満たす.
sudo apt -y install build-essential gcc g++ make cmake libtool texinfo dpkg-dev pkg-config
sudo apt -y install gfortran curl git libopenblas-dev liblapack-dev
NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール(Ubuntu 上)
CHOLMOD と SPQR は,CUDA が利用可能な場合に GPU による高速化を行うことができる.GPU を利用しない場合,この節の操作は不要である.
Ubuntu での NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール: 別ページ »で説明
SuiteSparse, METIS その他のインストール(Ubuntu 上)
① apt を用いてインストールする場合
端末で,次のコマンドを実行する.
次の操作により,Ubuntu 24.04 LTS では SuiteSparse 7.6.1(AMD, CAMD, COLAMD, CCOLAMD, CHOLMOD, CXSparse, UMFPACK, KLU, SPQR などを含む),BLAS,LAPACK,libmetis 5.1.0 がインストールされる.
sudo apt -y install libopenblas-dev liblapack-dev libsuitesparse-dev libmetis5 libmetis-dev
apt によるインストールでは,共有ライブラリは /usr/lib/x86_64-linux-gnu,ヘッダーファイルは /usr/include/suitesparse に配置される.
② ソースコードを用いてインストールする場合
apt が提供する版よりも新しい版を使う場合や,CUDA 対応でビルドする場合は,ソースコードからビルドする.
- apt の libmetis-dev, libmetis5, libsuitesparse-dev の削除
apt 版と自前ビルド版が混在すると,リンク時に意図しないライブラリが選択されることがあるため,apt 版を削除する.
sudo apt --purge remove -y libmetis-dev sudo apt --purge remove -y libmetis5 sudo apt --purge remove -y libsuitesparse-dev - SuiteSparse の Web ページを開く
最新版のバージョンとライセンスを確認.
- ソースコードのダウンロード
「-b stable」は,最新の安定版のブランチを指定している.
cd /usr/local sudo rm -rf SuiteSparse sudo git clone https://github.com/DrTimothyAldenDavis/SuiteSparse -b stable sudo chown -R $USER SuiteSparse
- SuiteSparse のビルド
SuiteSparse 7 系のビルドは CMake で行う.「-DSUITESPARSE_USE_CUDA=OFF」は CUDA を使わない設定である(既定値は ON).CUDA 対応でビルドする場合は,この指定を外す.
cd /usr/local/SuiteSparse mkdir -p build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DSUITESPARSE_USE_CUDA=OFF cmake --build . -j$(nproc)GraphBLAS はコンパイルに長い時間を要する.必要なパッケージのみをビルドする場合は,SUITESPARSE_ENABLE_PROJECTS で対象を指定する(依存するパッケージは自動的に含まれる).
cd /usr/local/SuiteSparse mkdir -p build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DSUITESPARSE_USE_CUDA=OFF \ -DSUITESPARSE_ENABLE_PROJECTS="suitesparse_config;amd;btf;camd;ccolamd;colamd;cholmod;cxsparse;ldl;klu;umfpack;spqr" cmake --build . -j$(nproc) - 確認
エラーメッセージが出ていないこと.
- インストール
共有ライブラリは
/usr/local/lib,ヘッダーファイルは/usr/local/include/suitesparse,CMake の設定ファイルは/usr/local/lib/cmake/SuiteSparseにインストールされる.cd /usr/local/SuiteSparse/build sudo cmake --install . sudo /sbin/ldconfig
- 終了の確認
- METIS について
SuiteSparse 7 系では,CHOLMOD が内部で用いる METIS が
CHOLMOD/SuiteSparse_metisとして CHOLMOD ライブラリに組み込まれてビルドされる.独立したlibmetisを必要とするソフトウェアがある場合は,apt の libmetis-dev(METIS 5.1.0)を利用するか,METIS の配布元からソースコードを取得してビルドする.
SuiteSparse 対応の Ceres Solver のインストール(Ubuntu 上)
Ceres Solver は,非線形最小二乗問題を解く C++ ライブラリである.SuiteSparse を利用することで,大規模なバンドル調整などで疎行列向けの線形ソルバーを使用できる.
- 前提ソフトウェア
Ceres Solver のインストールのために,cmake, google-glog, gflags, Eigen 3, BLAS, LAPACK をインストールする.SuiteSparse は,前述の①または②の手順でインストール済みであるものとする.
端末で,次のコマンドを実行する.
sudo apt -y install cmake libgoogle-glog-dev libgflags-dev libopenblas-dev liblapack-dev libeigen3-dev - Ceres Solver のビルド
「-b 2.2.0」は安定版(バージョン 2.2.0)をダウンロードすることを指定している.最新の安定版については https://github.com/ceres-solver/ceres-solver で確認する.
SuiteSparse 7 系は CMake の設定ファイル(
SuiteSparseConfig.cmake等)をインストールするため,インストール先が/usr/localであれば,個々のヘッダーディレクトリやライブラリファイルを CMake に指定する必要はない.cd /tmp sudo rm -rf ceres-solver git clone https://ceres-solver.googlesource.com/ceres-solver -b 2.2.0 cd ceres-solver mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DEIGENSPARSE=ON -DSUITESPARSE=ON -DBUILD_SHARED_LIBS=ON make -j$(nproc)cmake の出力に「Enabling use of SuiteSparse」と表示されていることを確認する.表示されない場合,SuiteSparse が検出されていない.
- 終了の確認
ここまでの一連の操作で,エラーメッセージが出るなどの問題がないこと.
- Ceres Solver のインストール
sudo make install sudo /sbin/ldconfig
- 終了の確認
- 動作確認
バンドル調整のサンプルプログラムを実行する.
cd /tmp/ceres-solver/build ./bin/simple_bundle_adjuster ../data/problem-16-22106-pre.txt実行結果の Solver Summary の行に「suitesparse」および「metis」が含まれていれば,SuiteSparse 対応でビルドされている.
- テスト
make test
- テスト結果の確認
共有ライブラリの検索パスの確認
Ubuntu では,/usr/local/lib は /etc/ld.so.conf.d/libc.conf によって共有ライブラリの検索パスに含まれている.そのため,/etc/ld.so.conf を編集する必要は通常はない.
検索パスに含まれていることは,端末で,次のコマンドを実行して確認する.
cat /etc/ld.so.conf.d/libc.conf
ライブラリをインストールした後は,端末で,次のコマンドを実行してキャッシュを更新する.
sudo /sbin/ldconfig
インストールしたライブラリが認識されていることは,端末で,次のコマンドを実行して確認する.
ldconfig -p | grep -E "cholmod|umfpack|cxsparse|suitesparseconfig|ceres"