SuiteSparse,CXSparse, BLAS, LAPACK, libmetis のインストール(Ubuntu 上)

SuiteSparse は,疎行列に関する数値計算パッケージの集合体である.主なパッケージは次の通り.

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 のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。

Ubuntu のインストールはこちらの別ページで説明する。

# パッケージリストの情報を更新
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 対応でビルドする場合は,ソースコードからビルドする.

  1. 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
    
  2. SuiteSparse の Web ページを開く

    最新版のバージョンとライセンスを確認.

    https://people.engr.tamu.edu/davis/suitesparse.html

    https://github.com/DrTimothyAldenDavis/SuiteSparse

  3. ソースコードのダウンロード

    -b stable」は,最新の安定版のブランチを指定している.

    cd /usr/local
    sudo rm -rf SuiteSparse
    sudo git clone https://github.com/DrTimothyAldenDavis/SuiteSparse -b stable
    sudo chown -R $USER SuiteSparse
    
  4. 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)
    
  5. 確認

    エラーメッセージが出ていないこと.

  6. インストール

    共有ライブラリは /usr/local/lib,ヘッダーファイルは /usr/local/include/suitesparse,CMake の設定ファイルは /usr/local/lib/cmake/SuiteSparse にインストールされる.

    cd /usr/local/SuiteSparse/build
    sudo cmake --install .
    sudo /sbin/ldconfig
    
  7. 終了の確認
  8. 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 を利用することで,大規模なバンドル調整などで疎行列向けの線形ソルバーを使用できる.

  1. 前提ソフトウェア

    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
    
  2. 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 が検出されていない.

  3. 終了の確認

    ここまでの一連の操作で,エラーメッセージが出るなどの問題がないこと.

  4. Ceres Solver のインストール
    sudo make install
    sudo /sbin/ldconfig
    
  5. 終了の確認
  6. 動作確認

    バンドル調整のサンプルプログラムを実行する.

    cd /tmp/ceres-solver/build
    ./bin/simple_bundle_adjuster ../data/problem-16-22106-pre.txt
    

    実行結果の Solver Summary の行に「suitesparse」および「metis」が含まれていれば,SuiteSparse 対応でビルドされている.

  7. テスト
    make test
    
  8. テスト結果の確認

共有ライブラリの検索パスの確認

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"