NUIST HPC使用讲座 —— 用户环境设置 刘建宇 2015-04-14.

Slides:



Advertisements
Similar presentations
Linux 环境及 Shell 程序 操作系统实验 1. 二、 Shell 编程与进程通信 常用 shell 命令 文件及文件属性操作 ls 、 cp 、 mv 、 rm ln 、 ln –s 、 chmod 、 groupadd 、 useradd 输入输出操作 echo 、 cat >> 、
Advertisements

进 程. “ 程序 ” 和 “ 进程 ” 进程是 OS 对 CPU 执行的程序的运行过程的一种抽象。进程有自 己的生命周期,它由于任务的启动而创建,随着任务的完成(或 终止)而消亡,它所占用的资源也随着进程的终止而释放。 Linux 内核中通常把进程称为任务,每个进程主要通过一个称为进程描 述符(
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
上課教材 Database Slide Windows筆電 (32 bit)
第1单元 操作系统概论 第一节 绪论 操作系统定义.
Linux并行计算平台搭建及应用 王彦棡 2010年5月.
集群作业管理系统简介 报告人:罗正平 导 师:肖炳甲研究员.
技术支持部 张新凤( ) 并行机群系统安装、使用和管理 技术支持部 张新凤( )
UNIX的程序與工作控制 程序的定義與特性 程序的建立 相關指令 背景執行 調整程序優先權 signal與kill 工作控制
操作系统原理 Principles of Operating System
LINUX 环境下程序开发基础 曙光用户培训课程系列 课程时间:1.5小时 更新日期:2008年3月.
宁波材料所高性能计算集群普通用户培训 曙光公司.
在PHP和MYSQL中实现完美的中文显示
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
NUIST HPC使用讲座 ——代码调试 刘建宇
第三讲 shell 程序设计.
第 2 章 上機使用 Unix/Linux 內容: 操作介面 主機連線 登入主機 認識系統環境 使用者常用命令.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
MPI并行程序设计简介 曙光信息产业(北京)有限公司 2018年11月.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
台灣大學計算機及資訊網路中心 教學研究組 張傑生
Linux环境下程序编译 曙光信息产业(北京)有限公司.
NUIST HPC使用讲座 —— 作业提交 刘建宇
Hadoop I/O By ShiChaojie.
并行计算实验上机 国家高性能计算中心(合肥).
并行算法实践.
Shell Script 程式設計.
Shell程序设计 曙光信息产业股份有限公司.
Linux 圖形操作介面 GUI -- X-window 與 Webmin
第二讲 搭建Java Web开发环境 主讲人:孙娜
曙光信息产业(北京)有限公司 技术支持中心 戴荣 2007年12月
第四讲 MPI并行程序设计 课程网站:CourseGrading buaa.edu.cn 主讲教师: 赵长海
第二天 计算机基础技能培训 (一)linux基础知识
基于MPI的并行程序设计 王振海 西北工业大学理学院 西北工业大学高性能计算研究与发展中心 2018/11/28.
Linux下的程序编译和运行 曙光信息产业股份有限公司.
曙光集群简明使用手册 技术支持中心.
SVN服务器的搭建(Windows) 柳峰
Linux基本操作 程設實習課 ( 2/25 ).
网络常用常用命令 课件制作人:谢希仁.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
大型机使用手册.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
并行计算简介 高性能事业部:曹振南 年4月.
Windows 7 的系统设置.
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab3.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
如何有效率的學習Linux 培養組合能力 多用程式, 少寫程式 從錯誤訊息中學習 養成略讀 “各種文件” 加強英文基本閱讀能力 勤作筆記
Confidential Property
第六章 Shell基础.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab3.
Intel Compiler 安裝.
Drupal Dev 我想知道:什么时候、什么变化.
C语言环境配置.
姚金宇 MIT SCHEME 使用说明 姚金宇
杨振伟 清华大学 第一讲:Linux环境下编程(1)
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
iSIGHT 基本培训 使用 Excel的栅栏问题
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
临界区问题的硬件指令解决方案 (Synchronization Hardware)
Python 环境搭建 基于Anaconda和VSCode.
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
杨振伟 清华大学 第一讲:Linux环境下编程(1)
第四章 UNIX文件系统.
Presentation transcript:

NUIST HPC使用讲座 —— 用户环境设置 刘建宇 2015-04-14

!!!声明!!! ftp://202.195.238.13/Public/User_Environment.pdf 仅校内可访问 这里讨论的用户环境设置是基于目前(2014年)的NUIST HPC的配置上进行的 相关的用法、设置方式等有一定的普遍性,也有本地局限性 这里讨论的用法、设置方式,在不同的系统及配置下可能不适用 这里讨论的用法、设置方式,可能有不全面或不足之处 仅供参考,谨慎使用 ftp://202.195.238.13/Public/User_Environment.pdf 仅校内可访问

用户环境设置方式 静态设置 动态设置 直接在用户环境文件(.bashrc, kshrc, cshrc等)中设置具体的路径信息 在脚本中硬编码嵌入具体的路径信具体的路径信息 适用于单一或静态的环境 设置简单,不需要特殊的脚本编程知识 动态设置 使用“modules” system,例如 Environment Modules http://modules.sourceforge.net/ Lmod http://sourceforge.net/projects/lmod/ 适用于多版本共存,需要动态切换的复杂环境 需要相应的脚本编程知识

用户环境变量 PATH LD_LIBRARY_PATH MANPATH 应用程序环境变量 可执行程序的搜索路径 当前路径”.”不是缺省搜索位置 从安全角度考虑,缺省设置没有把”.” 添加到可执行程序搜索路径中 当前路径”.”不在可执行程序搜索路径中时,执行当前路径下的可执行程序时,必须指明当前路径信息“./”,例如;”./hello” 从方便角度考虑,可以在自己的用户环境文件中在PATH环境变量中添加当前路径”.” LD_LIBRARY_PATH 运行时,除了ld.so.conf中设置的缺省路径之外的其他共享库的搜索路径 该路径在缺省路径之前查找 跟编译时库搜索路径没有关系,编译的时候还是该加-L就得加,不要混淆 该变量只适用于Linux,其他系统如,AIX, Mac OS X等不使用该变量 MANPATH 帮助命令man搜索man page的路径 应用程序环境变量 根据具体的应用程序而定,例如,NETCDF, NCARG_ROOT等

用户环境变量(续) 以下环境变量慎用,可能会与预期的工作方式不同 FPATH LIBRARY_PATH C_INCLUDE_PATH KSH的shell function的搜索路径 可用于头文件搜索路径 (Linux OS and Mac OS X) LIBRARY_PATH gcc 编译期间查找动态链接库时指定查找共享库的路径 不是所有编译器都会使用该变量 C_INCLUDE_PATH gcc 编译期间头文件的搜索路径 CPLUS_INCLUDE_PATH g++ 编译期间C++头文件的搜索路径

用户环境变量(续) 编译相关的通用约定环境变量 以下环境变量仅为通用约定,具体的应用程序不一定遵循这些约定 使用遵循通用约定的configure/make时,如无具体设置这些变量,则会调用缺省的编译设置 FC Fortran 编译器 F90 Fortran 90编译器 F95 Fortran 95编译器 F77 Fortran 77编译器 CC C 编译器 CXX C++ 编译器 CPP C预处理器 FCFLAGS Fortran 编译选项 FFLAGS F77 编译选项 CFLAGS C 编译选项 CXXFLAGS C++ 编译选项 CPPFLAGS C预处理选项 LDFLAGS 链接选项

使用Environment Modules 常用命令 列出加载的模块 – module list 列出可用的模块 – module avail 加载指定的模块 – module load 卸载指定的模块 – module unload 切换不同的模块 – module switch 使用自定义module 需要首先加载 use.own 模块 把自定义的模块放$MODULEPATH中定义的用户自定义模块路径下,一般为$HOME/privatemodules 或 $HOME/.privatemodules module 脚本的编写采用tcl/tk(http://tcl.tk/) 可参考$MODULEPATH中定义的模块路径下的脚本来改写自己的module脚本 加载Module时按$MODULEPATH中定义的路径顺序搜索,使用第一个匹配的项目

Environment Modules注意事项 ‘module load’ 为前添加方式 后加载的模块的路径在最前面 在搜索路径时,按路径顺序搜索,使用搜索到的第一个匹配项目 某些模块需要使用的库有兼容性问题 libhdf5 : matlab, hdf5 / ncl + netcdf 4.x 某些模块可能有依赖关系 netcdf 4.x, hdf5, ncl IMPI, MKL, Intel Compiler 编译模块是基础模块,大多数模块的加载都依赖于编译模块 需要首先加载编译模块,然后再加载其他的模块 加载缺省版本模块时,可以不用指明版本号 切换不同版本模块时,需要指明版本号 在module加载后,修改了module脚本,再卸载,无法完全清除旧的信息。因此,要更改module脚本时,如该module已加载,需要先卸载,再更改module脚本。

用户环境设置注意事项 对同一环境变量,同时通过module命令与静态方式分别进行设置,只有其中的一个设置会有效,例如, module load netcdf/3.6.3 export LD_LIBRARY_PATH=/my/netcdf/lib:${LD_LIBRARY_PATH} export的设置有效 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/my/netcdf/lib export的设置无效 module加载的netcdf-3.6.3的LD_LIBRARY_PATH有效(前添加方式) 通过module load加载相关库后,只是设置了常用约定的环境变量,并非适用所有的应用情形。针对具体的应用,可采用以下步骤获得正确设置所需要的信息 先使用module load加载相关的模块 使用env命令,查看PATH、LD_LIBRARY_PATH中等对应模块的位置及相关变量的设置 根据具体应用的要求,设置对应的相关信息

用户环境设置注意事项(续) 除非清楚相关的设置及相关关系,否则最好不要同时混用module命令与静态方式进行设置,特别是交叉混合设置不同编译器,不同版本库 可执行程序、库、头文件的搜索都是依相关搜索路径顺序进行,使用第一个匹配的项目。在有多个同名文件时,需要注意搜索路径顺序,以免使用的并不是所期望的。 在用户环境文件或脚本中安全切换环境设置的方式为 module purge module load use.own # 可选步骤,如果需要加载自己的模块 module load ‘编译器模块’ module load ‘相关模块 … …’ 当登录节点的login shell与计算节点的login shell设置不同时,有可能引起作业运行时因环境初始化不一致而导致作业运行问题。这一问题大多发生在用户账户信息同步的问题上。可以通过设置相应的login shell的用户环境设置文件自行解决或通知系统管理员对账户信息同步进行处理 当login shell 与作业脚本shell不同时,相应的用户环境设置文件中都要进行相同的设置,以避免出现运行时,运行环境不一致的情况

login shell与non login-shell 取得Shell需要完整的登入流程,就称为login shell non-login shell 取得Shell而不需要重复登入的动作 login shell 和 non-login shell的最大区别在于读取环境变量的配置文件不同 在X介面下启动的终端,基本都是non-login shell

Interactive与non-interactive shells login shell 或 non-login shell 可以交互式输入/中断命令 non-interactive shell 一个子shell,通常是一个non-login shell 在interactive shell下执行脚本,将会启动non-interactive shell non-interactive shell只能从其父进程处继承环境变量 ksh 在non-interactive shell中不扩展父进程中的别名和shell functions

用户环境初始化流程 bash ksh ? ~/.bash_profile /etc/profile ? ~/.bash_login NO Yes Yes ? ~/.bash_login login shells NO ~/.bash_login ~/.profile ~/.bash_profile non-login shells ~/.bashrc $ENV ksh ~/.kshrc NO -p /etc/profile ~/.profile $ENV non-login shells Yes non-login shells

用户环境初始化流程(续) csh/tcsh tcsh ? ~/.tcshrc /etc/csh.csh /etc/csh.login Yes NO login shells ~/.tcshrc -f option NO ~/.cshrc non-login shells Yes

不同Shell模式都涉及的用户初始化文件 执行方式 bash ksh csh/tcsh interactive login shell 打开putty终端 ~/.bashrc ~/.kshrc ~/.cshrc interactive non-login shell 打开xterm终端 non-interactive login shell 执行远程命令 non-interactive non-login shell 运行一个脚本 crontab启动任务 注:以上测试环境为 Red Hat Enterprise Linux Server release 6.2 (Santiago) GNU bash, version 4.1.2(1)-release ksh sh (AT&T Research) 93t+ 2010-06-21 tcsh 6.17.00 (Astron) 2009-07-10 因环境/系统配置不同,有可能有差异

运行MPI任务时环境初始化过程 调度节点 主节点 MPI任务节点 non-interactive login shell 执行远程命令 脚本中所设环境变量只在主节点及对MPI主进程有效,要传递到MPI任务节点,需通过MPI启动脚本的相应参数 执行远程命令 my_job.sh 环境变量继承顺序 non-interactive non-login shell 主节点 环境变量 MPI节点 环境变量 mpirun non-interactive non-login shell 执行远程命令 non-interactive login shell mpi_prog.exe … …

运行MPI任务时环境初始化过程(续) 主节点 MPI任务节点 Interactive login shell my_job.sh 脚本中所设环境变量只在主节点及对MPI主进程有效,要传递到MPI任务节点,需通过MPI启动脚本的相应参数 my_job.sh 环境变量继承顺序 non-interactive non-login shell 主节点 环境变量 MPI节点 环境变量 mpirun non-interactive non-login shell 执行远程命令 non-interactive login shell mpi_prog.exe … …

作业脚本的额外设置 login shell – CSH login shell – KSH 使用qsub 提交KSH的脚本 设置#PBS -S /bin/bash可避免出现以下信息(需.bashrc与.cshrc的设置一致) e file : tput: No value for $TERM and no -T specified o file : Warning: no access to tty (Bad file descriptor). Thus no job control in this shell. login shell – KSH 设置#PBS -S /bin/bash可避免出现以下信息(需.bashrc与.kshrc的设置一直) /etc/profile[90]: .[5]: .[5]: .[46]: shopt: not found [No such file or directory] 如果需要在作业脚本中使用module命令,则需在作业脚本开头添加以下命令进行ksh的环境初始化 ‘ . /etc/profile.d/modules.sh ’ 使用qsub 提交KSH的脚本

作业脚本的额外设置(续) 把当前脚本中用户环境变量复制到作业脚本运行环境中 在PBS作业脚本中设置#PBS –V #!/bin/bash export work_dir=/blah/blah export data_dir=/blah/blah … … qsub my_job.sh ... … my_job.sh #!/bin/bash #PBS -N check_env #PBS -q Regular #PBS -l node=2:ppn=2 #PBS -l walltime=00:00:05 #PBS -P P000000000 #PBS -V echo work_dir=‘|’$work_dir‘|’ echo data_dir=‘|’$data_dir‘|’

快速检测运行环境 平台信息的检测 /etc/system-release lsb_release -a uname -a /proc/cpuinfo 查看cpu类型 cat /proc/cpuinfo | grep "model name" 具有相同core id的cpu是同一个core的超线程 cat /proc/cpuinfo | grep "core id" 具有相同physical id的cpu是同一颗cpu封装的线程或者cores cat /proc/cpuinfo | grep "physical id" siblings 与 “cpu cores”不一致,则超线程打开 cat /proc/cpuinfo | grep " siblings" | sort –u cat /proc/cpuinfo | grep " cpu cores" | sort –u /proc/meminfo egrep --color 'Mem|Cache|Swap' /proc/meminfo free 命令 free -g vmstat

快速检测运行环境 软件环境的检测 mpirun -np $nprocs env #!/bin/bash # #PBS -N check_env #PBS -q Regular #PBS -l node=2:ppn=2 #PBS -l walltime=00:00:10 #PBS -P P000000000 cd $PBS_O_WORKDIR pwd > env_pwd_out module list > env_module_out 2>&1 env > env_out ulimit -a > env_ulimit_out echo $PATH > env_PATH_out echo $LD_LIBRARY_PATH > env_LD_LIBRARY_PATH_out which mpirun  >  env_which_mpi mpicc -v >>  env_which_mpi  2>&1 mpif90  -v >>  env_which_mpi  2>&1 每个节点都运行 mpirun -np $nprocs env 只在主节点运行

快速检测运行环境 (续) qsub hello.pbs #!/bin/bash # #PBS -N hello #PBS -q Regular #PBS -l node=2:ppn=2 #PBS -l walltime=00:00:10 #PBS -P P000000000 cd $PBS_O_WORKDIR mpirun -np 4 ./hello program hello include 'mpif.h' integer rank, size, ierror, tag, status(MPI_STATUS_SIZE) call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror) print*, 'node', rank, ': Hello world' call MPI_FINALIZE(ierror) end mpif90 -o hello hello_mpi.f90 qsub hello.pbs #include <stdio.h> #include <mpi.h> int main(int argc, char* argv[]) { int rank, size; char hostname[256]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); gethostname(hostname,255); printf("Hello, world, I am %4d of %4d on host %s\n", rank, size, hostname); MPI_Finalize(); return 0; } mpicc -o hello hello_mpi.c

问题或建议 hpc@nuist.edu.cn