ฉันมีโค้ดหลามที่ฝึกโครงข่ายประสาทเทียมโดยใช้เทนเซอร์โฟลว์
ฉันได้สร้างอิมเมจนักเทียบท่าตามอิมเมจ 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" หรือไม่