Linux* で環境モジュールファイルを使用
モジュールファイルを使用して環境を設定して、使用するコンポーネントの正確なバージョンを指定できます。
Linux* で環境を設定するには、次の 2 つの方法があります:
このページで説明されているように、モジュールファイルを使用します
setvars.sh 設定ファイルを使用します
ほとんどのコンポーネント・ツールのフォルダーには、それぞれのコンポーネントに必要な環境変数を設定するモジュールファイルのスクリプトが含まれています。モジュールファイルを使用し setvars.sh スクリプトに代わって開発環境を設定できます。モジュールファイルでは引数がサポートされていないため、複数の設定 (32 ビットや 64 ビットの設定など) をサポートするインテル® oneAPI ツールおよびライブラリーでは複数のモジュールファイルを使用します。
注
インテル® oneAPI ツールキットで提供されるモジュールファイルは、Tcl 環境モジュール(Tmod)および Lua 環境モジュール(Lmod)と互換性があり、次のバージョンがサポートされます:
Tmod バージョン 4.2
Tcl バージョン 8.4
Lmod バージョン 8.7.44
次のコマンドを使用して、システムにインストールされている Tmod のバージョンを確認します:
module --version次のコマンドを使用して、システムにインストールされている Tcl のバージョンを確認します:
$ tclsh
$ puts $tcl_version
8.6
$ exit各モジュールファイルは実行時にシステム上の Tcl バージョンを自動的に検証しますが、Tmod のバージョンはテストしません。
モジュールファイルのバージョンがサポートされていない (4.2 より前) 場合、回避策があります。詳細については、インテル開発ツールにおける環境モジュールの利用 (英語) を参照してください。
oneAPI 2024.0 リリース以降、インテル® クラシック・コンパイラーが廃止されたため、icc モジュールファイルは削除されました。代わりにインテル® oneAPI C/C++ コンパイラー (icx および icpx) を使用してください。ifort コンパイラーは引き続き使用できますが、同等のインテル® oneAPI Fortran コンパイラー (ifx) を使用することを推奨します。
モジュールファイル自動ロード
環境モジュール (Tmod) の “自動ロード” 機能は、モジュールファイルのバージョン 4.2 で実験的な機能として導入されました。自動ロード機能は、5.0 リリースで標準機能に昇格されました。インテル® oneAPI ツールキットの 2024.0 リリースでは、依存モジュールファイルの自動ロードは自動ロード機能に依存するようになりました。環境モジュールのバージョン 4.x を使用している場合、依存モジュールファイル (prereq コマンドによって参照されるファイル) の自動ロード機能はデフォルトで無効になっています。バージョン 5.x では、依存モジュールの自動ロードがデフォルトで有効になります。
自動ロード機能を制御するには、MODULES_AUTO_HANDLING 環境変数を使用して、参照されているすべての前提条件モジュールファイルを自動的にロードするようにモジュールファイルに指示します。この動作は、--auto コマンドライン・オプションを使用して一時的にオーバーライドできます。
MODULES_AUTO_HANDLING=1は、prereq コマンドによる自動ロードを有効にします。MODULES_AUTO_HANDLING=0は、prereq コマンドによる自動ロードを無効にします。
「HINT: 次のモジュールを最初にロードする必要があります」、というテキストを含むエラーメッセージが表示される場合、前提条件コマンドの自動ロードを有効にするため、MODULES_AUTO_HANDLING=1 環境変数を追加するか、モジュール環境を設定して auto_handling 構成を “1” に設定する必要があります。
$ module -V
Modules Release 4.4.1 (2020-01-03)
$ module use /opt/intel/oneapi/2024.1/etc/modulefiles/
$ module load compiler
Loading compiler/2024.1.0
ERROR: compiler/2024.1.0 cannot be loaded due to missing prereq.
HINT: the following module must be loaded first: tbbこの問題は、以下のいずれかの方法で解決できます。
auto_handling を 1 に設定するコマンドを実行します:
$ module config auto_handling 1
$ module load compiler
Loading compiler/2024.1.0
Loading requirement: tbb/2021.12 compiler-rt/2024.1.0 oclfpga/2024.1.0MODULES_AUTO_HANDLING=1 に設定:
$ export MODULES_AUTO_HANDLING=1
module load compiler
Loading compiler/2024.1.0
Loading requirement: tbb/2021.12 compiler-rt/2024.1.0 oclfpga/2024.1.0依存関係を手動で読み込みます:
$ module load tbb compiler-rt oclfpga compiler --verbose
Loading tbb/2021.12
Loading compiler-rt/2024.1.0
Loading oclfpga/2024.1.0
Loading compiler/2024.1.0詳細は、MODULES_AUTO_HANDLING (英語) を参照してください。
すべてのモジュールファイルをロードする
2024.0 リリース時点では、intel/oneapi/2024.0 に oneapi という “すべてをロードする” モジュールファイルがあります。oneapi モジュールファイルは、利用可能なすべてのモジュールファイルを読み込み、上記の MODULES_AUTO_HANDLING=1 環境変数に依存せずに、すべての前提条件モジュールも正しい順序で読み込まれるようにします。Lmod モジュールファイル・システムで使用できるはずです。インストールに intel/oneapi/2024.0 ディレクトリーが含まれていない場合、インテル® oneAPI ベース・ツールキットやインテル® HPC ツールキットなどのインストーラーを使用して製品をインストールします (ツールキット全体をインストールしたくない場合は、カスタマイズ・オプションを使用します)。oneapi モジュールファイルの主な機能は、ツールキットのバージョンに固有のモジュールファイル (例: intel/oneapi/2024.0 または intel/oneapi/2024.1 など) のみをロードすることです。
特定のモジュールファイルをロードするカスタム・モジュールファイルを作成
どのモジュー ファイルをロードするか制御するには、特定のモジュールファイル・セット (およびその前提条件) をロードする “メタ” モジュールファイルを作成できます。たとえば、インテル® コンパイラーのみをセットアップする環境が必要な場合は、次のように作成します:
module load tbb
module load compiler-rt
module load oclfpga
module load compilerモジュールファイル・スクリプトの場所
インテル® oneAPI のモジューファイル・スクリプトは、それぞれのコンポーネント・ディレクトリーにある modulefiles フォルダーにあります (個々の vars スクリプトの配置方法と同様)。たとえば、2024.0 以降の oneAPI ツールキット・リリースのデフォルトのインストールでは、compiler のモジューファイル・スクリプトは /opt/intel/compiler/<component-version>/etc/modulefiles/ ディレクトリーにあります。また、2023 以前の oneAPI ツールキット・リリースでは、compiler のモジューファイル・スクリプトは /opt/intel/compiler/<component-version>/modulefiles/ ディレクトリーにあります。
注
<component-version> は、コンポーネント (ライブラリーまたはツール) のバージョン番号です。開発システムには複数のコンポーネントが並行してインストールされている場合があります (例: compiler/2023.1、compiler/2023.2、compiler/2024.0 など)。ツールキットのバージョン (コンポーネントのコレクションのバージョン) は、そのツールキットとともに提供されたコンポーネントのバージョンとは異なる場合があります。
インテル® oneAPI コンポーネントのフォルダーがどのように展開されているかにより、openAPI モジュールファイルをインストール先で直接使用することが難しい場合があります。そのため、インテル® oneAPI インストール・フォルダーには特殊な modulefiles-setup.sh スクリプトが用意されており、インテル® oneAPI モジュールファイルの操作を簡単にできます。デフォルトのインストールでは、設定スクリプトは以下に配置されます: /opt/intel/oneapi/modulefiles-setup.sh
modulefiles-setup.sh スクリプトは、インテル® oneAPI のインストールに含まれるすべてのモジュールファイル・スクリプトを検索し、それらのフォルダーを単一ディレクトリーに保存します。
これらのバージョン管理されたモジュールファイル・スクリプトは、それぞれ modulefiles-setup.sh スクリプトで配置されたモジュールファイルを指すシンボリック・リンクです。各コンポーネント・フォルダーには、少なくとも "latest" (最新) バージョンのモジュールファイルが含まれ、バージョンを指定しなくてもデフォルトで最新のコンポーネントをロードできます。modulefiles-setup.sh スクリプトを実行するときに --ignore-latest オプションを使用すると、module_load コマンドでバージョンが指定されていない場合、最も新しいバージョン (semver ルールに従って) のモジュールファイルがロードされます。
あるいは、2024.0 以降のツールキットのインストールでは、統合ディレクトリー・ レイアウト内に、そのツールキットのバージョンに関連付けられているすべてのコンポーネントのモジュールファイルが含まれる modulefiles フォルダーがあります。たとえば、インテル® oneAPI ベース・ツールキット 2024.0 をデフォルトの場所にインストールすると、/opt/intel/oneapi/2024.0/etc/modulefiles フォルダーに、事前構成済みですぐに使用できるベース・ツールキット 2024.0 のモジュールファイルのコレクションが見つかります。このフォルダーを MODULEPATH 環境変数に追加するか、module use コマンドを実行して事前構成された modulefile フォルダーを指定することにより、モジュールファイルのセットアップに追加できます。インテル® HPC ツールキット 2024.0 をインストールすると、2 つのツールキットが同じバージョン (この場合は 2024.0) であるため、同じ場所にモジュールファイルが追加されます。
事前構成されたツールキットの modulefiles フォルダー内には、そのツールキットのバージョンに属する 64 ビット・コンポーネント用のモジュールファイルをロードする oneapi という名前のモジュールファイルがあります。oneapi モジュールファイルは便利なモジュールファイルであり、個々のモジュールファイルを使用する必要はありません。また、oneapi モジュールファイルは、modulefiles-setup.sh スクリプトによって作成されたフォルダー内では期待どおりに動作しません。
modulefiles ディレクトリーの作成
modulefiles-setup.sh スクリプトを実行します。
デフォルトでは、modulefiles-setup.sh スクリプトは、インテル® oneAPI ツールキットのインストール・フォルダーに modulefiles という名前のフォルダーを作成します。インストール・フォルダーが書き込み可能でない場合、--output-dir=<path-to-folder> オプションを使用して、書き込み可能な場所に modulefiles フォルダーを作成します。modulefiles-setup.sh スクリプトのオプションの詳細については、modulefiles-setup.sh --help を実行して確認できます。
modulefiles-setup.sh スクリプトが実行されると、次のような階層が最上位の modulefiles 出力フォルダーに作成されます(モジュールファイルの正確なリストはインストールによって異なります)。この例では、インテル® Advisor 環境を設定する 1 つのモジュールファイルと、コンパイラー環境を設定する 2 つのモジュールファイルがあります(コンパイラーのモジュールファイルは、すべてのインテル® コンパイラーの環境を設定します)。最新のシンボリック・リンクをたどると、semver の規則に従って最上位バージョンのモジュールファイルを指します。

MODULEPATH 環境変数を更新して、modulefiles-setup.sh スクリプトによって作成された modulefiles 出力フォルダーを含めるか、module use <folder_name> コマンドを実行します。
システムに Tcl モジュールファイル環境をインストール
次の手順は、Ubuntu* で環境モジュール・ユーティリティーを実行する例を示しています。module ユーティリティーのインストールと設定の詳細については、http://modules.sourceforge.net/ (英語) を参照してください。
環境を設定:
$ sudo apt update
$ sudo apt install tcl
$ sudo apt install environment-modulestclsh のローカルコピーが新しいものであることを確認します(サポートされているバージョンについては、このページの最初を参照してください)。
$ echo 'puts [info patchlevel] ; exit 0' | tclsh
8.6.8module エイリアスを初期化して、module のインストールをテストします。
$ source /usr/share/modules/init/sh
$ module注
POSIX* 互換シェルの初期化は、上記の source コマンドで機能するはずです。ただし、モジュールファイルの init フォルダーの正確な場所と名前は、Linux* ディストリビューションによって異なります。環境モジュールのほとんどのインストールでは、モジュールファイル初期化スクリプト (/etc/profile.d/modules.sh) が自動的に source されます。module コマンドが適切に初期化されているかテストするには、module --version コマンドを実行します。次のような応答が返されます:
Modules Release 4.4.1 (2020-01-03)これにより、システムは次のセクションに示すモジュールコマンドを使用できます。
modulefiles-setup.sh スクリプトの使用
次のことが前提とされています:
Linux* 開発システムに
tclshがインストールされているシステムに環境モジュール・ユーティリティー (
moduleなど) がインストールされているinit コマンドで
.../modules/init/sh(または等価なシェル) が source されているoneAPI 開発に必要な oneAPI ツールキットがインストールされている
インストール・ディレクトリーに移動し、tbb をロードします:
$ cd <oneapi-root-folder> # oneapi_root インストールディレクトリに移動
$ ./modulefiles-setup.sh # modulefiles-setup スクリプトを実行
$ module use modulefiles # 上記で作成した modulefiles フォルダーを使用
$ module avail # tbb/X.Y などが表示されます
$ module load tbb # tbb/X.Y モジュールをロード
$ module list # ロードした tbb/X.Y モジュールがリストされるアンロードの前に、
envコマンドを使用して環境を検証し、ロードしたモジュールファイルで変更された部分を探します。
$ env | grep -i "intel"たとえば、tbb modulefile をロードした場合、コマンドは、その modulefile によって変更された env の一部を表示します。
tbbをアンロード:
$ module unload tbb # 環境から tbb/X.Y の変更を削除
$ module list # tbb/X.Y env var モジュールはリストされなくなりました注
modulefile はスクリプトですが、ユーザーがインストールおよび保守する “module” インタープリターによってロードおよび解釈されるため、‘x’ (実行可能) 権限を設定する必要はありません。インテル® oneAPI ツールキットのインストールには、modulefile インタープリターは含まれていないため、個別にインストールする必要があります。同様に、modulefiles には ‘w’ 権限は必要ありませんが、読み取り可能である必要があります (‘r' 権限をすべてのユーザーに設定します)。
バージョン管理
インテル® oneAPI ツールキットのインストーラーは、バージョンフォルダーを使用して、インテル® oneAPI ツールとライブラリーが並んだレイアウトになるようにします。バージョン管理されたコンポーネント・フォルダーは、modulefiles-setup.sh スクリプトによって使用され、バージョン管理された modulefiles が作成されます。このスクリプトは、modulefiles 出力フォルダーへのシンボリック・リンクを <modulefile-name>/version として作成し、module コマンド使用時にそれぞれの modulefile をバージョン別に参照できるようになります。
$ module avail
---------------- modulefiles -----------------
ipp/1.1 ipp/1.2 compiler/1.0 compiler32/1.0複数のモジュールファイル
ツールやライブラリーは、modulefiles フォルダー内に複数の modulefiles を持つ場合があります。それぞれがロード可能モジュールになります。展開されたコンポーネント・フォルダーごとにバージョンが割り当てられます。
oneAPI で使用する modulefiles の記述法を理解する
シンボリックリンクは modulefiles-setup.sh スクリプトによって使用され、すべての modulefiles を modulefiles フォルダーに集約します。実際の modulefile スクリプトは移動または変更されません。${ModulesCurrentModulefile} 環境変数は、それぞれのインストール・フォルダーにある実際の modulefile ではなく、各 modulefile ファイルへのシンボリックリンクを格納します。実際のモジュールファイルへの完全なパスを決定するため、各モジュールファイルには次のようなステートメントが含まれています:
[ file normalize ${scriptpath} ]製品インストール・ディレクトリーにある元の modulefile への参照を取得します。これは、インストール場所がカスタマイズされている場合、実行時に不明であり推測する必要があるためです。実際のモジュールファイルはインストールされた場所以外に移動することはできません。そうしないと、構成に必要なライブラリーやアプリケーションへの絶対パスを検出できなくなります。
さらに詳しく理解するには、インストールに含まれる modulefiles を確認してください。ほとんどの場合、実際のファイルへの symlink 参照を解決するコメントと、バージョン番号 (およびバージョン・ディレクトリー) の解析が含まれます。また、インストールされた TCL が適切なバージョンレベルであることを確認するチェックも含まれます。
関連情報
modulefiles の詳細については、以下をご覧ください: