การติดตั้งและใช้งาน Mathematica บนระบบ Rocks Clusters

พอดีมีโอกาสได้ติดตั้งและทดลองใช้งาน Mathematica บนระบบ Cluster ของหน่วยงานหนึ่ง ก็เลยจะมาเล่าให้ฟังครับ ระบบ Cluster ที่พูดถึงนี้ใช้ระบบ Rocks Clusters (www.rocksclusters.org) ซึ่งก็คือ Linux ที่มีการเพิ่มความสามารถการจัดการ Cluster เข้าไป งานที่ระบบ Cluster นี้ถูกใช้จะเป็นงานคำนวณด้วย software หลักๆอย่าง Gromacs, NAMD, NONMEM, R และก็ที่หน่วยงานนี้เขียนขึ้นกันเองโดยใช้ mpi บ้าง

license ของ Mathematica ที่ได้มานี้เป็นแบบ network ครับ นั่นหมายความว่าเราต้องทำการติดตั้ง Mathematica License Manager หรือ mathlm ก่อน  ซึ่งผมก็ได้ลง mathlm ไว้บน server อีกตัวซึ่งเป็นระบบ Windows server 2008 ที่หน่วยงานนี้เค้าใช้เป็น license server สำหรับโปรแกรมตัวอื่นๆด้วย ในการลงก็ไม่ได้ยุ่งยากอะไรครับเพียงแต่ตอบคำถามไปเรื่อยๆ 🙂  พอลงเสร็จ Mathlm มันก็จะ start ตัวมันเองอัตโนมัติครับ (ลองดูรายละเอียดเพิ่มเติมที่http://reference.wolfram.com/mathematica/tutorial/InstallingMathLM.html)

มาที่ตัว head node หรือตัวหลักของ cluster ผมก็ติดตั้ง Mathematica โดยใช้ตัวติดตั้งสำหรับ Linux  ซึ่งไฟล์ที่ผมได้มาเป็นไฟล์ขนาดประมาณ 1.2 GB ชื่อ Mathematica_8.0.4_LINUX_MachineSpecific.sh ในการติดตั้งผมก็เพียงแค่พิมพ์

./ Mathematica_8.0.4_LINUX_MachineSpecific.sh

ที่terminal ครับ จากนั้นก็ตอบคำถามไปเรื่อยโดยผมให้ตัว Mathematica นี้ติดตั้งตัวมันเองที่ /share/apps/Wofram/Mathematica/8.0 (/share/apps นี้เป็นdirectory ที่ทุกเครื่องใน cluster จะมองเห็น) และตัวคำสั่งในการเรียกใช้งาน (เช่น mathematica, math, MathKernel) ให้ติดตั้งไว้ที่ /share/apps/Wolfram/Mathematica/8.0/bin ในตอนที่ต้องใส่รหัสผมก็เลือกติดตั้งแบบ network โดยระบุชื่อของ license server ที่เราลง mathlm ไป

หลังจากนั้นเพื่อที่จะให้ users ทุกคนสามารถเรียกใช้งานได้ ผมก็สร้างไฟล์ชื่อ mathx.sh ไว้ที่ /share/apps/profile/ (จริงๆแล้วสร้างไว้ที่ไหนก็ได้ครับ) โดยในไฟล์นี้จะมีบรรทัดนี้อยู่ครับ

export PATH=”/share/apps/Wolfram/Mathematica/8.0/bin/:$PATH”

หลังจากนั้นก็ copy ไปไว้ที่ /etc/profile.d/ ของทุกเครื่องใน cluster ซึ่งการ copy ไฟล์ไปยังเครื่องลูก หรือ compute nodes นั้นในระบบของ rocks clusters เราสามารถใช้คำสั่งนี้ได้เลยครับ

rocks run host “cp /share/apps/profile/mathx.sh /etc/profile.d/”

ในการเรียกใช้งาน Mathematica เราก็เลือกจากเมนูหรือจะพิมพ์ Mathematica ที่ terminal ได้เลยครับ

 

การใช้งานคำนวณแบบ parallel หรือแบบขนานใน Mathematica นั้นไม่ยากเลยครับ คำสั่งหลักๆก็พวกที่ขึ้นต้นด้วย Parallel ทั้งหลายครับ ตัวอย่างที่ผมทดลองด้านล่างนี้ผมก็เอามาจากตัวอย่างใน Mathematica ครับ โดยอันแรกนี้ทดลองเรียกใช้งานโดยใช้คำสั่ง ParallelEvaluate ซึ่งมันจะโหลด Mathematica kernel เพื่อรันในแต่ล่ะ cpu core ของตัว head node ของ cluster หรือ local ซึ่งมี 8 cpu cores (Mathematica เรียก kernel ที่ถูกรันบนแต่ละ core ของ CPU แบบนี้ว่า subkernel ครับ โดยที่ตัว kernel หลักหรือ master kernel จะมี KernelID=0 ครับ)

การคำนวณแบบ parallel บนระบบของ cluster อย่างเช่น Rocks clusters นี้เราต้องทำการโหลด subkernel ไปไว้บนทุกๆ cpu cores ในแต่ละ compute node (เครื่องลูก) ที่เราต้องการใช้งาน ตัวอย่างอันที่สองนี้ผมทดลองเรียก subkernel โดยใช้ คำสั่ง LaunchKernels[RemoteMaching[]] จาก package ชื่อ SubKernels`RemoteKernels ซึ่งมากับ Mathematica (รายละเอียดสามารถดูได้จาก help ของ Mathematica เองครับ) เพื่อรัน subkernel จำนวนทั้งหมด 96 subkernels ในเครื่อง compute nodes จำนวน 8 เครื่องโดยมีจำนวน subkernels ที่ต้องการแตกต่างกันไปในแต่ล่ะเครื่อง

ซึ่งพอหลังจากที่เราโหลด subkernel เรียบร้อยแล้วเราก็สามารถใช้คำสั่งพวก parallel ทั้งหลายได้ครับ

ส่วนในกรณีที่จะใช้งานในแบบ text mode ผ่าน SGE ก็สามารถทำได้ง่ายๆตามนี้ครับ
ก็สร้างไฟล์ SGE สำหรับไว้ส่งไปรันเช่น run.job

#!/bin/bash
#$ -pe mpich 16
#$ -S /bin/bash
#$ -cwd
#$  -j y
cp -v $TMPDIR/machines TMP_machines
/share/apps/Mathematica/8.0/bin/math -run “<< testrun.math”

 

โดยที่ testrun.math ก็คือ Mathematica codes ที่ต้องการคำนวณ เช่น

Needs[“SubKernels`RemoteKernels`”]

$RemoteCommand= “ssh `1` -n -l `3` \”/share/apps/Mathematica/9.0/bin/math -mathlink -linkmode Connect `4` -linkname `2` -subkernel -noinit >& /dev/null &\””

hosts=Import[“TMP_machines”,”List”]

imin=2;
imax=Length[hosts];

Table[
Print[“starting Kernel: “,i,” on “,hosts[[i]]];
LaunchKernels[RemoteMachine[hosts[[i]]]];,
{i,imin,imax}]

id=ParallelEvaluate[$ProcessID];
AppendTo[$Echo,”stdout”]
Print[“Kernels: “, id//Length]
Print[“Prime Number Test – Parallel”]

data=Parallelize[Table[PrimeQ[n! + 1],{n,400,550}]]//AbsoluteTiming;

data2=Table[PrimeQ[n! + 1],{n,400,550}]//AbsoluteTiming;

Print[“Parallel: “,data[[1]]]
Print[“Not Parallel; “,data2[[1]]]

Exit[]

ซึ่งในกรณีของตัวอย่างนี้ Mathematica จะรันตัว subkernel เองอัตโนมัติบน CPU ที่ SGE กำหนด ตามจำนวนที่เราต้องการ ด้วยคำสั่ง LaunchKernels[n]  โดยที่ n นี้ก็คือจำนวน subkernels ที่เราต้องการใช้ในการคำนวน ซึ่งจะต้องเท่ากับจำนวน CPU ที่เรากำหนดในบรรทัด

#$ -pe mpich n

การติดตั้ง package ของ R เพิ่ม

การติดตั้ง package ของ R เพิ่ม สำหรับบน Linux ครับ

1. ติดตั้งจาก source

source ที่พูดถึงก็เป็นพวกไฟล์ package ที่มีสกุล tar.gz ที่สามารถ download ได้จากเวบ http://www.r-project.org/ หรือ http://cran.r-project.org/mirrors.html  หลังจากที่ download มาแล้วเก็บไว้ที่ เช่น /home/MyAccount/Rlib ก็สามารถพิมพ์คำสั่งนี้ได้เลย

$ R CMD INSTALL ชื่อไฟล์.tar.gz -l /home/MyAccount/Rlib/

2. ติดตั้งจากเวบ CRAN โดยตรง

พิมพ์คำสั่งนี้ใน R console สำหรับติดตั้ง package ที่ต้องการไว้ที่ /home/MyAccount/Rlib

> install.packages(“ชื่อ package”, lib=”/home/MyAccount/Rlib/”)

หลังจากติดตั้งแล้วจะเรียกใช้ก็ให้พิมพ์ใน R console คำสั่ง นี้ครับ

library(“ชื่อ package”, lib.loc=”/home/MyAccount/Rlib/”)

ถ้าหากมีปัญหาว่าต้องโหลดผ่าน proxy ก็ให้ลอง export http_proxy=”http://proxy:port” ดูครับ

3. ติดตั้งจาก github

กรณีที่อยากติดตั้ง package ที่อยู่บน Github เราสามารถทำได้โดยใช้คำสั่ง install_github ของ devtools ครับ เช่น

library(devtools)

install_github(“package”)

หรือถ้าต้องการระบุ path ที่จะเก็บpackageนี้ด้วยก็ทำได้โดยใช้ with_libpaths เช่น

with_libpaths(new=”/home/MyAccount/Rlib”, install_github(“package”))

Thai Latex บน Fedora 14 LXDE Desktop

การติดตั้ง Thai Latex บน Fedora 14 LXDE Desktop

วิธีนี้ต้องมี gcc compiler ก่อนนะครับ ซึ่งติดตั้งได้เลยจากตัว Add/Remove Software

ก่อนอื่นต้องไป download ไฟล์พวกนี้ก่อนนะครับ

  1. ftp://linux.thai.net/pub/ThaiLinux/software/libthai/libdatrie-0.2.4.tar.gz
  2. ftp://linux.thai.net/pub/thailinux/software/thailatex/thailatex-0.4.4.tar.gz
  3. ftp://linux.thai.net/pub/thailinux/software/swath/swath-0.4.0.tar.gz

หลังจากนั้นก็แตกไฟล์พวกนี้ออกโดยที่อยู่folder ของใครของมัน

จากนั้นก็เริ่มติดตั้งโดยเริ่มที่ตัว libdatrie ก่อนครับ

ที่ terminal ก็เปลี่ยน folder ไปที่ folder ของ libdatrie จากนั้นก็พิมพ์

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

ตามด้วย

./configure

และ

make install

หลังจากนั้นก็ติดตั้ง swath โดยทำเช่นเดียวกันครับคือพิมพ์ ./configure แล้วตามด้วย make install

ต่อด้วย thailatex ครับทำเช่นเดียวกันกับ swath

เป็นอันว่าเสร็จแล้วครับ ผมใช้งานได้ไม่มีปัญหาครับ

ผมใช้ TexMakerX ในการแก้ไขไฟล์ Latex ครับ อาจต้องมีการปรับแต่งให้มันอ่านและบันทึกภาษาไทยโดยไปที่ Edit -> Setup Encoding… แล้วเลือก TIS-620 ครับ