跳到主要内容

提交License作业

License作业是指需要特定软件许可证才能运行的计算任务。Fsched调度器通过智能的许可证管理,确保作业在获得所需许可证资源后自动执行。

核心特性

  • 资源感知:实时监控许可证可用性
  • 智能排队:许可证不足时自动等待
  • 动态分配:外部许可证释放后自动获取
  • 灵活配置:支持命令行和模板两种提交方式

License作业运行流程:

未命名文件 (6)

前提条件

命令行提交方式

检查许可证可用性

命令语法

scontrol show lic --ext

示例输出与解读

[root@centos7-16c-1 ~]# scontrol show lic --ext
LicenseName=primesim@10.106.32.69_27000
Total=999 Used=0 Free=999 Reserved=0 Remote=yes
LastConsumed=0 LastDeficit=0 LastUpdate=Unknown
LicenseName=apex20k@10.106.32.69_27000
Total=999 Used=0 Free=99 Reserved=0 Remote=yes
LastConsumed=900 LastDeficit=900 LastUpdate=Unknown

字段详细说明

字段说明示例值分析
LicenseName许可证标识:license_name@server_nameapex20k@10.106.32.69_27000
Total许可证总数量999个
Used当前集群内使用的数量0个(集群内暂无使用)
Free当前集群剩余可用数量99个(关键决策指标)
Reserved预留许可证数量0个
Remote是否为远程许可证yes(来自外部服务器)
LastConsumed总消耗量(集群内+集群外)900个(外部使用了900个)
LastDeficit最近一次资源不足数量900个(曾缺900个)

关键洞察

  • Free=99 表示集群当前可用99个apex20k许可证
  • LastConsumed=900 说明外部系统正在使用900个许可证
  • 实际总许可证:999个,集群可用:99个,外部占用:900个

提交License作业

基本命令语法

srun -L <license_name>@<server_name>:<数量> <命令>

实际示例

# 请求100个apex20k许可证运行任务
[root@centos7-16c-1 ~]# srun -L apex20k@10.106.32.69_27000:100 sleep 600&
[1] 7070

作业状态监控

许可证不足时的状态

[root@centos7-16c-1 ~]# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
80 partition sleep root PD 0:00 1 (Licenses)

状态说明

  • ST=PD:等待状态(Pending)
  • REASON=(Licenses):等待原因为许可证资源不足
  • 作业ID 80 正在等待100个许可证,但当前只有99个可用

许可证释放与作业执行

外部许可证释放后的状态

# 作业开始运行
[root@centos7-16c-1 ~]# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
80 partition sleep root R 5:21 1 centos7-64c-6

# 许可证状态更新
[root@centos7-16c-1 ~]# scontrol show lic --ext
LicenseName=apex20k@10.106.32.69_27000
Total=999 Used=100 Free=899 Reserved=0 Remote=yes
LastConsumed=0 LastDeficit=0 LastUpdate=Unknown

状态变化分析

  • Used=100:作业使用了100个许可证
  • Free=899:可用数量减少到899个
  • LastConsumed=0:外部使用量清零(可能已释放)
  • 作业状态从PD变为R(Running)

任务模板提交方式

适用场景

任务模板的优势

  • 自动化计算:根据任务规模动态确定许可证需求
  • 策略统一:确保许可证分配的一致性
  • 简化操作:用户无需手动计算许可证数量
  • 资源优化:避免许可证的过度申请或不足

模板配置示例

Ansys HPC Pack许可证模板

#SBATCH -L ansys@se-lic:{% set cpus = (np | toInt) * (node_num | toInt) %}{% if cpus <= 4 %}0{% elseif cpus <= 12 %}1{% elseif cpus <= 36 %}2{% elseif cpus <= 132 %}3{% elseif cpus <= 516 %}4{% else %}0{% endif %}

模板逻辑解析

CPU核心数范围消耗许可证数量适用场景
≤ 4 cores0个小型计算任务
5-12 cores1个中型计算任务
13-36 cores2个大型计算任务
37-132 cores3个超大型计算任务
133-516 cores4个极端规模计算
>516 cores0个特殊处理

计算逻辑说明

  • cpus = np × node_num:总CPU核心数
  • 基于核心数范围确定对应的许可证数量
  • 此示例仅针对Ansys HPC Pack的按核心数许可证模式

模板配置界面

界面操作步骤

  1. 选择或创建任务模板
  2. 在Script部分添加许可证配置参数
  3. 保存模板配置

通过模板提交作业

操作流程

  1. 登录作业提交界面
  2. 选择配置好的许可证模板
  3. 设置作业参数(节点数、进程数等)
  4. 提交作业,系统自动计算所需许可证数量

优势体现

  • 用户无需关心具体的许可证计算规则
  • 系统自动根据作业规模分配合适的许可证数量
  • 确保许可证使用的最优化

最佳实践指南

许可证申请策略

合理估算数量

# 推荐:根据实际需求申请
srun -L apex20k@server:50 simulation_job

# 避免:过度申请
srun -L apex20k@server:200 simulation_job # 可能造成资源浪费

# 避免:申请不足
srun -L apex20k@server:5 simulation_job # 可能影响计算性能

作业排队优化

监控与调整

  • 定期检查 scontrol show lic --ext 了解许可证状态
  • 使用 squeue 监控作业等待状态
  • 根据排队情况调整作业提交时间或规模

模板设计建议

定制化模板规则

# 根据不同软件特性设计模板
#SBATCH -L <software>@<server>:{% if task_type == "small" %}1{% elseif task_type == "medium" %}2{% else %}4{% endif %}

故障排除

问题1:作业长时间等待许可证

# 检查当前许可证状态
scontrol show lic --ext

# 检查外部许可证使用情况
./lmstat -f <feature> -c <server>

问题2:许可证数量计算错误

  • 验证模板逻辑是否正确
  • 检查节点数和进程数设置
  • 确认许可证计算规则与实际软件要求匹配

问题3:许可证服务器连接失败

  • 验证网络连通性
  • 检查许可证服务器状态
  • 确认服务器地址和端口正确

高级功能

多许可证组合作业

复杂作业场景

# 同时申请多种许可证
srun -L ansys@server1:2,matlab@server2:1 complex_simulation