debian: Headless Nvidia for Cryptomining

ลองศึกษาการขุดเหมืองเงินคริปโตด้วยการ์ดจอ Nvidia

ปัญหาคือทดลองในเซิร์ฟเวอร์ที่ไม่ได้ต่อจอภาพไว้ และไม่ได้ลง Xserver ไว้ การใช้งานผ่าน ssh จึงปรับแต่งอะไรไม่ได้เลย การใช้ค่าที่ติดตั้งมาจากโรงงาน ทำให้การ์ดร้อนจัดจนใช้งานจริงไม่ได้
ปัญหาต่อมาคือไดรเวอร์บนลินุกซ์ล้าสมัยเล็กน้อย ใช้กับการ์ดจอใหม่ ๆ ไม่ค่อยได้ หรือใช้ได้แต่ไม่ดีพอ
(ระบบปฏิบัติการที่ใช้ คือ debian stretch)

ทางแก้คือ

แก้ปัญหาใช้งาน nvidia-settings ผ่าน ssh

ทำที่เครื่องเซิร์ฟเวอร์ที่ติดตั้งการ์ด Nvidia ไว้

ก่อนอื่น ถือว่าเราได้ลงไดรเวอร์ของ Nvidia มาแล้ว ด้วยคำสั่งดังนี้

$ sudo apt install nvidia-driver nvidia-smi nvidia-settings nvidia-xconfig

ต้องลง Xorg และเพื่อให้สะดวกในการเริ่มต้นและออกจาก X จึงติดตั้ง desktop manager ตัวเล็กไว้ด้วย คือ lightdm

$ sudo apt install lightdm

แก้ไข xorg.conf ให้สามารถใช้งานการปรับแต่งการ์ดจอได้ แล้วก็เริ่ม Xserver ใหม่ด้วยคำสั่ง

$ sudo nvidia-xconfig -a --cool-bits=31 --allow-empty-initial-configuration
$ sudo systemctl restart lightdm

ทำที่เครื่องลูก ที่ใช้งาน ssh
ssh เข้าไปที่เซิร์ฟเวอร์ ทำการ merge ค่า $DISPLAY หลักของ X ซึ่งก็คือของการ์ดจอ เข้ากับค่า $DISPLAY ของเราที่มาจาก ssh แล้วก็เรียกใช้ nvidia-settings ผ่านค่าดิสเพลย์หลัก

$ ssh -X root@SERVER
# xauth merge /var/run/lightdm/root/\:0
# nvidia-settings -c :0

จะสามารถใช้งานการปรับแต่งได้ตามต้องการ โดยตรวจดูค่าที่ปรับแต่งแล้ว ด้วยคำสั่ง nvidia-smi

ที่มา

แก้ปัญหาไดรเวอร์ลินุกซ์ล้าสมัย ด้วยการคอมไพล์รุ่นใหม่บน svn เอง

ติดตั้งแพ็คเกจที่ใช้งาน

$ sudo apt install subversion svn-buildpackage
$ sudo apt build-dep nvidia-driver

ดาวน์โหลดรุ่นใหม่จาก svn และคอมไพล์
*** อย่าลืมแก้ค่าในตัวแปร $TARGET ให้เป็นไดเรคทอรี่ที่เราต้องการ ***

$ TARGET=nvidia-graphics-drivers; mkdir $TARGET; cd $TARGET
$ svn co svn://anonscm.debian.org/pkg-nvidia/packages/nvidia-graphics-drivers/branches/384
$ cd 384
$ debian/rules get-orig-source
$ mkdir ../tarballs
$ mv nvidia-graphics-drivers* ../tarballs
$ svn-buildpackage --svn-ignore -us -uc -rfakeroot

จะได้ไฟล์แพ็คเกจนามสกุล .deb มาอยู่ในไดเรคทอรี่ ../build-area
ต่อไปก็สร้าง local repository จากไดเรคทอรี่ดังกล่าว ทำการแก้ไข apt/source ลบไดรเวอร์เก่า (ถ้ามี) แล้วก็ติดตั้งของใหม่

$ cd ../build-area
$ dpkg-scanpackages . /dev/null > Packages
$ sudo vi /etc/apt/sources.list.d/nvidia-384.list
deb [ trusted=yes ] file:$TARGET/nvidia-graphics-drivers/build-area ./
$ sudo systemctl stop lightdm
$ sudo apt-get remove ^nvidia ^libnvidia
$ sudo apt update
$ sudo apt install nvidia-driver nvidia-smi nvidia-settings nvidia-xconfig

บูตเครื่องใหม่ ก็จะสามารถใช้งานไดรเวอร์รุ่นใหม่ได้แล้ว

ที่มา

จบ

Topic: 

debian: Headless Nvidia for Cryptomining II

ภาคต่อของการขุดเหมืองโดยใช้การ์ดจอ Nvidia

จากครั้งก่อน การตั้งค่าของการ์ด ต้องตั้งค่าใหม่ทุกครั้งเมื่อบูตใหม่ (จริง ๆ สามารถบันทึกค่าเดิมไว้ แล้วนำมาใช้ใหม่ได้ แต่ไม่สะดวกสำหรับงาน console)
คราวนี้จะทำให้มีความเป็นอัตโนมัติมากขึ้น โดยไม่ต้องมาตั้งผ่าน Display Manager (lightdm) ดังนั้นจึงไม่ต้องลง lightdm แบบครั้งก่อนแล้ว

เราจะใช้โปรแกรมและไฟล์ EDID ของคุณ ฺBoris Dimitrov ในการจำลองจอเสมือน และปรับความเร็วพัดลมให้แปรผันตามอุณหภูมิ แต่เนื่องจากดูเหมือนโปรแกรมเดิมใช้งานได้แค่การ์ดใบเดียว และต้องลง tcsh ซึ่งไม่ใช่เชลล์ปริยายของเดเบียน เราจึงเอาของเดิมมาปรับปรุงเล็กน้อยดังนี้

  • ให้ใช้กับ bash ได้
  • ใช้กับการ์ดหลายใบได้
  • ปรับให้พัดลมทำงานรอบจัดมากขึ้น เพื่อให้ GPU เย็นลง
  • เอื้อให้ง่ายในการเร่งการทำงานของ GPU และหน่วยความจำ
  • ปรับลดการกินพลังงานลงมาเหลือ 80%
  • งานอื่น ๆ ให้ใช้งานได้คล่องตัวขึ้น

เนื่องจากเป้าหมายคือความเป็นอัตโนมัติมากขึ้น จึงขอใช้งานด้วยสิทธิ์ root ตั้งแต่ต้น เพื่อให้สะดวกในการปรับแต่ง ดังนั้นจึงต้องระวังในการทำงานหน่อย

เริ่มด้วย ถ้าเดิมลง lightdm ไว้แล้ว ให้ถอดออกก่อน

# apt purge lightdm

ถ้าเดิมยังไม่ได้ลงไดรเวอร์ ก็ลงก่อน

# apt install nvidia-driver nvidia-smi nvidia-settings

ลงของจำเป็นก่อน และดาวน์โหลดโปรแกรมมาใช้

# apt install awk git
# mkdir -p /PATH/TO/SOURCE/
# cd /PATH/TO/SOURCE
# git clone https://github.com/widhaya3/set_gpu_fans_public.git
# cd set_gpu_fans_public

เราอาจสั่งรันตรง ๆ ได้จากในนี้เลย หรืออาจนำไปติดตั้งในไดเรคทอรี่ /opt/set_gpu_fans ตามตัวอย่าง README.md ก็ได้
แต่เพื่อให้คล้ายกับต้นฉบับ เราจะสร้างลิงก์ไปที่ /opt แล้วสั่งรันจากที่นั่น และเผื่อต้นฉบับมีการปรับปรุง เราก็สามารถสั่ง git pull เพื่ออัปเดตโปรแกรมล่าสุดได้เลย

# mkdir -p /opt
# cd /opt
# ln -sf /PATH/TO/SOURCE/set_gpu_fans_public set_gpu_fans
# /opt/set_gpu_fans/cool_gpu

เสร็จแล้ว
หลังรันครั้งแรก โปรแกรมจะสร้างไฟล์คอนฟิกไว้ที่ /etc/set_gpu_fans_nv/ และไฟล์ปูม (log) ไว้ที่ /var/log/set_gpu_fans_nv-X มีรายละเอียดคือ

  • ไฟล์คอนฟิก /etc/set_gpu_fans_nv/nvscmd_exmod_once-0.cfg ไฟล์นี้จะถูกสั่งรันแค่ครั้งเดียวตอนเริ่มรัน
  • ไฟล์คอนฟิก /etc/set_gpu_fans_nv/nvscmd_exmod_loop-0.cfg ถูกรันทุกครั้งที่มีการเปลี่ยนความเร็วพัดลม
  • ไฟล์ปูม /var/log/set_gpu_fans_nv-0 บันทึกปูมของการ์ดใบแรก

ถ้ามีการ์ดหลายใบ เลขลงท้ายจะเพิ่มไปเป็น -1,-2,-3 ไปเรื่อย
เราจะดูผลงานและปรับแต่งภายหลังได้จากคำสั่ง nvidia-smi
ถ้าปรับแต่งจนใช้งานได้ดีแล้ว ก็เอาคำสั่งไปใส่ไว้ในไฟล์ /etc/rc.local เพื่อให้เริ่มงานตอนเปิดเครื่องได้เลย