ทำให้ Keras ทำงานบนระบบซีพียูมัลติคอร์หลายเครื่อง


11

ฉันกำลังทำงานกับโมเดล Seq2Seqโดยใช้ LSTM จาก Keras (โดยใช้พื้นหลัง Theano) และฉันต้องการที่จะทำให้กระบวนการเป็นคู่ขนานกันเพราะแม้แต่ข้อมูลไม่กี่ MB ก็ต้องใช้เวลาฝึกอบรมหลายชั่วโมง

เป็นที่ชัดเจนว่า GPU นั้นดีกว่าในการขนานมากกว่า CPU ในขณะนี้ฉันมี CPU เท่านั้นที่จะทำงานได้ ฉันสามารถเข้าถึง 16 CPUs (2 เธรดต่อคอร์ X 4 คอร์ต่อซ็อกเก็ต X 2 ซ็อกเก็ต)

จากเอกสารของการสนับสนุนมัลติคอร์ใน Theano ฉันจัดการเพื่อใช้ทั้งสี่คอร์ของซ็อกเก็ตเดียว ดังนั้นโดยทั่วไปซีพียูจะใช้งานที่ 400% เมื่อใช้ 4CPU และส่วนที่เหลืออีก 12 CPU ก็ยังไม่ได้ใช้งาน ฉันจะใช้ประโยชน์จากพวกเขาได้อย่างไร Tensorflow สามารถใช้แทนพื้นหลัง Theano ได้หากใช้งานได้

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


7

ในการตั้งค่าจำนวนเธรดที่ใช้ใน Theano (และดังนั้นจำนวนคอร์ CPU) คุณจะต้องตั้งค่าพารามิเตอร์บางอย่างในสภาพแวดล้อม:

import os
os.environ['MKL_NUM_THREADS'] = '16'
os.environ['GOTO_NUM_THREADS'] = '16'
os.environ['OMP_NUM_THREADS'] = '16'
os.eviron['openmp'] = 'True'

สิ่งนี้จะทำให้คุณสามารถใช้คอร์ทั้งหมดของซีพียูทั้งหมด

แน่นอนสิ่งนี้สามารถทำได้ใน Tensorflow:

import tensorflow as tf
from keras.backend import tensorflow_backend as K

with tf.Session(config=tf.ConfigProto(
                    intra_op_parallelism_threads=16)) as sess:
    K.set_session(sess)
    <Your Keras code>

ฉันจะขอบคุณสำหรับรหัสนี้สำหรับการตั้งค่าจำนวนแกนใน R (ฉันใช้ keras ใน R และใช้เพียงบางส่วนของแกน ... ) โดยเฉพาะอย่างยิ่งสำหรับ tensorflow ขอบคุณมิลาน
gutompf

2
คุณสามารถใช้ Sys.setenv () เพื่อตั้งค่าตัวแปรสภาพแวดล้อมใน R คล้ายกับการใช้ os.environ [var] ใน Python
Thomas Cleberg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.