การปรับ Clock Frequency ของ NVIDIA GPU

Clock Frequency มีผลอย่างมากกับประสิทธิภาพของการประมวลผล ยิ่งความถี่สูงก็ยิ่งทำให้ Processor สามารถ Execute คำสั่งได้เร็วขึ้น ใน CPU เราอาจจะทำคุ้นเคยกับการทำ Overclock เพื่อเพิ่ม Clock Frequency แต่ใน GPU ก็สามารถทำได้เช่นเดียวกัน ด้วยวิธีการดังต่อไปนี้

ตัวอย่างเครื่องที่ผมใช้จะเป็น K40 ทั้งหมด 2 ตัวนะครับ

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

nvidia-smi -q -d SUPPORTED_CLOCKS

เมื่อสั่งแล้วความถี่ที่สนับสนุนทั้งหมดจะขึ้นมาประมาณนี้

==============NVSMI LOG==============

Timestamp                           : Wed Oct 31 10:07:38 2018
Driver Version                      : 410.57

Attached GPUs                       : 2
GPU 00000000:03:00.0
    Supported Clocks
        Memory                      : 3004 MHz
            Graphics                : 875 MHz
            Graphics                : 810 MHz
            Graphics                : 745 MHz
            Graphics                : 666 MHz
        Memory                      : 324 MHz
            Graphics                : 324 MHz

GPU 00000000:83:00.0
    Supported Clocks
        Memory                      : 3004 MHz
            Graphics                : 875 MHz
            Graphics                : 810 MHz
            Graphics                : 745 MHz
            Graphics                : 666 MHz
        Memory                      : 324 MHz
            Graphics                : 324 MHz

ในที่นี้ผมมี GPU 2 ตัวก็จะขึ้นมาทั้งสองตัวเลย ที่นี่ Clock Frequency ของ GPU จะมีทั้งหมด 2 ค่า คือ Memory Clock กับ GPU Clock จากผลลัพท์ที่ได้ ก็หมายความว่าถ้าเราตั้ง Memory Clock เป็น 324 MHz จะสามารถตั้ง GPU Clock ได้เป็น 324 MHz เท่านั้น แต่ถ้าตั้ง Memory Clock เป็น 3004 MHz จะสามารถ กำหนด GPU Clock ได้เป็น 875, 810, 745 และ 666 MHz 

หลังจากนี้เราจะมาดูว่า Clock ของการ์ดเราตอนนี้เป็นเท่าไหร่ ด้วยคำสั่ง

nvidia-smi -q -d CLOCK

ซึ่งจะแสดงผลลัพท์มาแบบนี้ (ผมตัดส่วนของการ์ดใบที่สองออกนะครับ เพราะมันยาว แถมยังเหมือนอันแรก)

==============NVSMI LOG==============

Timestamp                           : Wed Oct 31 10:11:44 2018
Driver Version                      : 410.57

Attached GPUs                       : 2
GPU 00000000:03:00.0
    Clocks
        Graphics                    : 324 MHz
        SM                          : 324 MHz
        Memory                      : 324 MHz
        Video                       : 405 MHz
    Applications Clocks
        Graphics                    : 745 MHz
        Memory                      : 3004 MHz
    Default Applications Clocks
        Graphics                    : 745 MHz
        Memory                      : 3004 MHz
    Max Clocks
        Graphics                    : 875 MHz
        SM                          : 875 MHz
        Memory                      : 3004 MHz
        Video                       : 540 MHz
    Max Customer Boost Clocks
        Graphics                    : N/A
    SM Clock Samples
        Duration                    : 1116.44 sec
        Number of Samples           : 100
        Max                         : 875 MHz
        Min                         : 324 MHz
        Avg                         : 340 MHz
    Memory Clock Samples
        Duration                    : 1116.45 sec
        Number of Samples           : 100
        Max                         : 3004 MHz
        Min                         : 324 MHz
        Avg                         : 416 MHz
    Clock Policy
        Auto Boost                  : N/A
        Auto Boost Default          : N/A

  ...

ในส่วนของ Application Clocks จะบอกว่าตอนนี้การ์ดของเราตั้ง Clock ไว้ที่เท่าไหร่ ซึ่งก็คือ 745 MHz สำหรับ GPU และ 3004 MHz สำหรับ Memory ในส่วนของ Default Application Clocks จะบอกว่าค่าพื้นฐานของการ์ดนี้คือเท่าไหร่ ซึ่งเป็นค่าที่ควรจะเป็น เอาไว้อ้างอิงเวลาที่เราปรับไปปรับมาจนลืม Clock เริ่มต้นได้ครับ

ทีนี้เวลาที่เราจะตั้งค่า Clock Frequency ใหม่ก็ง่ายมาก เพียงแค่ใช้คำสั่ง

nvidia-smi -ac 3004,810

ตัวแรกตัวแรกคือ Memory Clock และตัวที่สองคือ GPU Clock เลขนี้จะต้องเป็นเลขที่ปรากฎตอนที่เราสั่งดู Supported Clock เท่านั้น ถ้าเอาเลขอื่นมามันจะไม่ยอมให้ตั้งนะครับ ถ้าสั่งแล้วเวิร์คมันจะขึ้นประมาณนี้ครับ

Applications clocks set to "(MEM 3004, SM 810)" for GPU 00000000:03:00.0
Applications clocks set to "(MEM 3004, SM 810)" for GPU 00000000:83:00.0
All done.

ทีนี้เราก็ใช้ได้อย่างสบายใจเหมือนเดิม โดยมี Clock Frequency ที่เพิ่มขึ้น แต่ข้อควรระวังคือการเพิ่ม Clock คือการเพิ่ม Heat และ Power เพราะงั้นมันจะกินไฟมากขึ้นและร้อนกว่าเดิม ซึ่งบางครั้งถ้ามันร้อนเกินไป หรือกินไฟเกิน GPU จะปรับค่ากลับมาที่ Based Clock เวลารันครับ

ทีนี้เรียนผูกก็ต้องเรียนแก้ วิธีปรับให้กลับมาเป็น Based Clock เหมือนเดิมก็สามารถใช้คำสั่ง

nvidia-smi -rac

ได้เลยครับ ไม่ต้องไปจำ Clock เดิมให้ยุ่งยาก

 

หมายเหตุ คำสั่ง nvidia-smi ทุกคำสั่งที่ผ่านมา ถ้าเราไม่ได้กำหนดอะไรเป็นพิเศษจะหมายถึงทำงานกับการ์ดทั้งหมดในเครื่อง เช่น Query จะโชว์ข้อมูลทั้งสองเครื่อง หรือคำสั่งปรับ Clock ก็จะแก้ Clock ทั้งสองเครื่องเลย ถ้าเราต้องการทำงานกับการ์ดใบใดใบหนึ่งก็เพิ่ม flag -i <card_id> เข้าไปได้เลยครับ (เลขรันตั้งแต่ 0 ถึง จำนวนการ์ด -1)

เช่น ถ้าจะเช็ค Clock ของการ์ดใบแรกก็ใช้เป็น

nvidia-smi -q -i 0 -d CLOCK

หรือถ้าจะปรับ Clock เฉพาะการ์ดใบแรกก็เป็น

nvidia-smi -i 0 -ac 3004,810

Taxonomy upgrade extras: