ฉันจะเริ่มงานฝึกอบรม AWS Sagemaker ด้วยการเข้าถึง GPU ในคอนเทนเนอร์นักเทียบท่าของฉันได้อย่างไร

ฉันมีโค้ดหลามที่ฝึกโครงข่ายประสาทเทียมโดยใช้เทนเซอร์โฟลว์

ฉันได้สร้างอิมเมจนักเทียบท่าตามอิมเมจ tensorflow/tensorflow:latest-gpu-py3 ที่รันสคริปต์ python ของฉัน เมื่อฉันเริ่มอินสแตนซ์ EC2 p2.xlarge ฉันสามารถรันคอนเทนเนอร์นักเทียบท่าได้โดยใช้คำสั่ง

docker run --runtime=nvidia cnn-userpattern train

และคอนเทนเนอร์ที่มีโค้ดของฉันทำงานโดยไม่มีข้อผิดพลาดและใช้ GPU ของโฮสต์

ปัญหาคือ เมื่อฉันพยายามเรียกใช้คอนเทนเนอร์เดียวกันในงานฝึกอบรม AWS Sagemaker ด้วยอินสแตนซ์ ml.p2.xlarge (ฉันลองใช้ ml.p3.2xlarge ด้วย) อัลกอริทึมจะล้มเหลวโดยมีรหัสข้อผิดพลาด:

ImportError: libcuda.so.1: ไม่สามารถเปิดไฟล์วัตถุที่ใช้ร่วมกัน: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ตอนนี้ฉันรู้แล้วว่ารหัสข้อผิดพลาดนั้นหมายถึงอะไร หมายความว่าสภาพแวดล้อมรันไทม์ของโฮสต์นักเทียบท่าไม่ได้ตั้งค่าเป็น "nvidia" เอกสารประกอบของ AWS ระบุว่าคำสั่งที่ใช้ในการเรียกใช้อิมเมจนักเทียบท่าอยู่เสมอ

docker run image train

ซึ่งจะใช้งานได้หากตั้งค่ารันไทม์เริ่มต้นเป็น "nvidia" ใน docker/deamon.json มีวิธีแก้ไขโฮสต์ deamon.json หรือบอกนักเทียบท่าใน Dockerfile ให้ใช้ "--runtime=nvidia" หรือไม่


person user2443088    schedule 06.03.2019    source แหล่งที่มา


คำตอบ (1)


ด้วยความช่วยเหลือจากบริการสนับสนุนของ AWS เราจึงสามารถค้นหาปัญหาได้ อิมเมจนักเทียบท่าที่ฉันใช้ในการรันโค้ดคือ อย่างที่ฉันพูดไปแล้ว tensorflow/tensorflow:latest-gpu-py3 (มีอยู่ใน https://github.com/aws/sagemaker-tensorflow-container)

แท็ก "ล่าสุด" อ้างอิงถึงเวอร์ชัน 1.12.0 ในขณะนี้ ปัญหาไม่ใช่ของฉันเอง แต่เกิดจากอิมเมจนักเทียบท่าเวอร์ชันนี้

หากฉันใช้อิมเมจนักเทียบท่าของฉันบน tensorflow/tensorflow:1.10.1-gpu-py3 มันจะทำงานตามที่ควรจะเป็นและใช้ GPU อย่างเต็มที่

เห็นได้ชัดว่ารันไทม์เริ่มต้นถูกตั้งค่าเป็น "nvidia" ใน docker/deamon.json บนอินสแตนซ์ GPU ทั้งหมดของ AWS sagemaker

person user2443088    schedule 07.03.2019