You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grid Engine HPC集群计算节点运行家目录中的AMPL软件

解决Grid Engine集群中AMPL在计算节点的调用问题

问题背景

在大学Grid Engine架构的HPC集群中,用户将AMPL安装在家目录,希望通过队列作业脚本执行echo "include s.run;" | ./ampl运行模型求解。但提交的作业实际在登录节点执行,触发penalty1/penalty2处罚,AMPL进程被杀死,错误信息显示Mathematica相关隧道脚本被调用,AMPL进程被杀。

用户提供的配置文件

作业脚本

#!/bin/bash -l
#$ -cwd
#$ -l h_rt=12:0:0  # Request 1 hour runtime
#$ -l h_vmem=64G   # Request 1GB RAM

source ~/.bashrc

cd $HOME/ampl.linux-intel64

echo "include s.run;" | ./ampl

.bashrc文件

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
module load gcc-libs/4.9.2
module load xorg-utils/X11R7.7
module load mathematica/13.1.0
source /shared/ucl/apps/bin/defmods

# AMPL setup
export AMPL_HOME="$HOME/software/ampl"
export PATH="$AMPL_HOME:$PATH"

s.run脚本

model /home/ucbvapk/ampl.linux-intel64/model4.md;
data /home/ucbvapk/ampl.linux-intel64/data75.dat;

option solver conopt;
option conopt_options 'outlev=3 maxftime=36000 opttol=0.1 rgmax=1e-15';
#option ipopt_options 'tol=1e-30';
option solver_msg 1;

solve;

set I := 1..len1;
set J := 1..len2;

for {i in I} {printf "%d,%.5f\n", i, b[i] > fileb;};
for {i in I} {printf "%d,%.5f\n", i, y[i] > filey;};
for {i in J} {printf "%d,%.5f\n", i, d[i] > filed;};
for {i in J} {printf "%d,%.5f\n", i, e[i] > filee;};
for {i in I} {printf "%d,%.5f\n", i, degA[i] > filedegA;};
for {i in I} {printf "%d,%.5f\n", i, strA[i] > filestrA;};
for {i in J} {printf "%d,%.5f\n", i, degB[i] > filedegB;};
for {i in J} {printf "%d,%.5f\n", i, strB[i] > filestrB;};

错误信息

Using existing ~/Scratch/.Mathematica/13.1/FrontEnd/tunnel.sh
Using existing ~/Scratch/.Mathematica/13.1/FrontEnd/tunnel_sub.sh
/var/opt/sge/node-d00a-222/job_scripts/1360741: line 12: 223298 Done                    echo "include s.run;"
     223299 Killed                  | ./ampl

错误分析

  1. Mathematica模块的干扰:.bashrc中加载的Mathematica模块包含强制在登录节点建立X11隧道的逻辑,导致作业被绑定到登录节点执行,违反集群调度规则触发处罚。
  2. AMPL路径不一致:.bashrc中配置的AMPL_HOME路径$HOME/software/ampl与作业脚本中进入的目录$HOME/ampl.linux-intel64不匹配,导致路径混淆。
  3. 本地调用的不可靠性:作业脚本中使用./ampl依赖当前工作目录的正确性,若环境变量未正确对齐,计算节点可能无法找到可执行文件。

修复步骤

1. 移除.bashrc中不必要的模块加载

编辑~/.bashrc,注释或删除Mathematica相关模块加载行:

# 注释或删除以下行
# module load mathematica/13.1.0

原因:Mathematica的隧道脚本会强制作业在登录节点运行,触发集群违规处罚。

2. 对齐AMPL的路径配置

确认AMPL实际安装目录为$HOME/ampl.linux-intel64,更新.bashrc中的AMPL环境变量:

# AMPL setup - 修正为实际安装目录
export AMPL_HOME="$HOME/ampl.linux-intel64"
export PATH="$AMPL_HOME:$PATH"

修改后,无论当前工作目录在哪,都能通过环境变量直接找到AMPL可执行文件。

3. 优化作业脚本

作业脚本无需加载整个.bashrc(避免引入不必要的环境干扰),直接设置AMPL路径或利用环境变量调用:

#!/bin/bash -l
#$ -cwd
#$ -l h_rt=12:0:0
#$ -l h_vmem=64G

# 直接设置AMPL路径,替代source ~/.bashrc
export AMPL_HOME="$HOME/ampl.linux-intel64"
export PATH="$AMPL_HOME:$PATH"

# 进入AMPL目录并调用(利用PATH环境变量直接使用ampl命令)
cd $AMPL_HOME
echo "include s.run;" | ampl

注意:使用ampl替代./ampl,利用PATH环境变量直接调用,可靠性更高。

4. 验证文件路径

s.run脚本中已使用绝对路径指向模型和数据文件,确保这些文件在集群共享家目录中存在(若为计算节点本地目录需提前同步)。

验证方法

提交作业前,先在计算节点的交互式会话中测试:

qrsh -l h_rt=1:0:0,h_vmem=64G
export AMPL_HOME="$HOME/ampl.linux-intel64"
export PATH="$AMPL_HOME:$PATH"
cd $AMPL_HOME
echo "include s.run;" | ampl

确认AMPL能正常运行无报错后,再提交批量作业。

内容的提问来源于stack exchange,提问作者apg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:22:39