ทำงานกับกลุ่ม HPC


11

ในมหาวิทยาลัยของฉันเรามีกลุ่มคอมพิวเตอร์ HPC ฉันใช้คลัสเตอร์เพื่อฝึกตัวแยกประเภทและอื่น ๆ ดังนั้นโดยปกติจะส่งงานให้กับคลัสเตอร์ (เช่นงูหลาม scikit เรียนรู้สคริปต์) ผมต้องเขียนสคริปต์ทุบตีที่มี (อื่น) qsub script.pyคำสั่งเช่น

อย่างไรก็ตามฉันพบว่ากระบวนการนี้น่าผิดหวังมาก โดยปกติสิ่งที่เกิดขึ้นคือฉันเขียนสคริปต์หลามบนแล็ปท็อปของฉันจากนั้นฉันลงชื่อเข้าใช้เซิร์ฟเวอร์และอัปเดตที่เก็บ SVN ดังนั้นฉันจึงได้รับสคริปต์หลามเดียวกัน จากนั้นฉันเขียนสคริปต์ Bash นั้นหรือแก้ไขเพื่อให้ฉันสามารถเรียกใช้สคริปต์ทุบตีได้

อย่างที่คุณเห็นสิ่งนี้น่าผิดหวังจริง ๆ สำหรับทุก ๆ การอัพเดทเล็กน้อยสำหรับสคริปต์ไพ ธ อนฉันต้องทำหลายขั้นตอนเพื่อให้มันทำงานที่คลัสเตอร์คอมพิวเตอร์ แน่นอนว่างานจะยิ่งซับซ้อนมากขึ้นเมื่อฉันต้องวางข้อมูลบนเซิร์ฟเวอร์และใช้เส้นทางของชุดข้อมูลบนเซิร์ฟเวอร์

ฉันแน่ใจว่าผู้คนจำนวนมากที่นี่กำลังใช้คอมพิวเตอร์คำนวณสำหรับงานด้านข้อมูล ฉันแค่อยากรู้ว่าพวกคุณจัดการส่งงานไปยังกลุ่มได้อย่างไร?


1
โอ้ความสุขของการใช้งานเพิ่มขึ้นโดย ... ความสุขของระบบการกระจาย :)
LogC

คำตอบ:


5

ขอให้ผู้ดูแลระบบกริดของคุณเพิ่มเครื่องท้องถิ่นของคุณเป็น "ส่งโฮสต์" และติดตั้ง SGE (ซึ่งเราคิดว่าคุณกำลังใช้งานอยู่คุณไม่ได้พูดจริง) ดังนั้นคุณสามารถทำได้qsubจากเครื่องของคุณ

หรือ....

ใช้ emacs จากนั้นคุณสามารถแก้ไข HPC ของคุณผ่านทางสิ่งอำนวยความสะดวกการเชื่อมต่อ ssh "การเดินสาย" ของ emacs และเปิดเปลือกในหน้าต่าง emacs อื่น คุณไม่ได้บอกว่าคุณต้องการใช้เครื่องมือแก้ไข / ระบบปฏิบัติการใด คุณสามารถกำหนดค่า emacs เพื่อบันทึกไฟล์ได้สองที่ดังนั้นคุณสามารถบันทึกลงในเครื่องท้องถิ่นของคุณสำหรับการรันการทดสอบและระบบไฟล์ HPC พร้อมกันสำหรับงานใหญ่


4

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

เนื่องจากคลัสเตอร์ของคุณดูเหมือนจะqsubตั้งค่าปัญหาของคุณอาจเกี่ยวข้องกับการเรพลิเคตข้อมูลตามเครื่อง (นอกเหนือจากการรันคำสั่งในแต่ละโหนด) ดังนั้นเพื่อกล่าวถึงจุดนี้คุณอาจเขียนscpสคริปต์เพื่อคัดลอกสิ่งต่าง ๆ ไปยังและจากแต่ละโหนดในคลัสเตอร์ (ซึ่งแน่นอนว่าดีกว่ากับ SVN) หรือคุณอาจตั้งค่า NFS สิ่งนี้จะช่วยให้สามารถเข้าถึงข้อมูลได้ง่ายและโปร่งใสและลดความจำเป็นในการจำลองข้อมูลที่ไม่จำเป็น

ตัวอย่างเช่นคุณสามารถเข้าถึงโหนดคัดลอกข้อมูลไปยังสถานที่ดังกล่าวและใช้ข้อมูลจากระยะไกลผ่านการสื่อสารเครือข่าย ฉันไม่คุ้นเคยกับวิธีตั้งค่า NFS แต่คุณสามารถเข้าถึงได้แล้ว (ในกรณีที่โฟลเดอร์บ้านเหมือนกันในทุกเครื่องที่คุณเข้าถึง) จากนั้นสคริปต์และข้อมูลสามารถส่งไปยังที่เดียวและเข้าถึงได้ในภายหลังจากที่อื่น นี่คือคล้ายกับวิธีการ SVN ยกเว้นมันโปร่งใส / ตรงไปตรงมามากขึ้น


4

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

หากคุณพบว่าตัวเองกำลังทำการแก้ไขสคริปต์ Python บนแล็ปท็อปของคุณจากนั้นอัปเดตไดเรกทอรี SVN ของคุณในคลัสเตอร์ทำไมไม่ทำงานโดยตรงในส่วนหน้าของคลัสเตอร์ทำการแก้ไขเล็กน้อยที่จำเป็นทั้งหมดแล้วในตอนท้ายของวันยอมรับ ทุกสิ่งที่นั่นและอัปเดตแล็ปท็อปของคุณหรือไม่

สิ่งที่คุณต้องทำคือทำความคุ้นเคยกับสภาพแวดล้อมที่นั่น (OS, editor, ฯลฯ ) หรือติดตั้งสภาพแวดล้อมของคุณเอง (ฉันมักจะติดตั้งในโฮมไดเร็กตอรี่ของฉันในเวอร์ชั่นล่าสุดของVim , Tmuxฯลฯ ด้วย dotfiles ที่เหมาะสม บ้านที่นั่น)

นอกจากนี้คุณยังสามารถจัดทำข้อมูลของคุณและแม้กระทั่งผลลัพธ์ระดับกลางหากขนาดอนุญาต ที่เก็บของฉันมักจะประกอบด้วยรหัสข้อมูล (เวอร์ชันดั้งเดิมและเวอร์ชันที่ทำความสะอาดแล้ว) เอกสารและแหล่งกระดาษเพื่อการเผยแพร่ (ลาเท็กซ์)

สุดท้ายคุณสามารถสคริปต์การส่งงานของคุณเพื่อหลีกเลี่ยงการแก้ไขสคริปต์ด้วยตนเอง qsubยอมรับสคริปต์จาก stdin และยอมรับ#$ความคิดเห็นทั้งหมดเป็นอาร์กิวเมนต์บรรทัดคำสั่ง


3

จากถ้อยคำของคำถามของคุณฉันคิดว่าคุณมีเครื่องท้องถิ่นและเครื่องระยะไกลที่คุณอัปเดตสองไฟล์ - สคริปต์ Python และ Bash script ไฟล์ทั้งสองอยู่ภายใต้การควบคุม SVN และทั้งสองเครื่องสามารถเข้าถึงเซิร์ฟเวอร์ SVN เดียวกันได้

ฉันขอโทษฉันไม่มีคำแนะนำเฉพาะสำหรับระบบกริดของคุณ แต่ให้ฉันทำรายการประเด็นทั่วไปที่ฉันพบว่ามีความสำคัญสำหรับการปรับใช้ใด ๆ

เก็บการเปลี่ยนแปลงการผลิต จำกัด เพียงการเปลี่ยนแปลงการกำหนดค่า คุณเขียนว่าคุณต้อง "ใช้เส้นทางชุดข้อมูลบนเซิร์ฟเวอร์"; เสียงนี้สำหรับฉันเหมือนคุณมีเส้นทางที่เขียนลงในสคริปต์ Python ของคุณ นี่ไม่ใช่ความคิดที่ดีเพราะคุณจะต้องเปลี่ยนเส้นทางเหล่านั้นในทุก ๆ เครื่องที่คุณย้ายสคริปต์ไป หากคุณยอมรับการเปลี่ยนแปลงเหล่านั้นกลับไปที่ SVN จากนั้นบนเครื่องท้องถิ่นของคุณคุณจะมีเส้นทางระยะไกลและบนและบน ... (จะเกิดอะไรขึ้นถ้ามีเส้นทางไม่เพียง แต่เส้นทางเท่านั้น แต่ยังใช้รหัสผ่านด้วย? เซิร์ฟเวอร์.)

ดังนั้นให้พา ธ และข้อมูลการตั้งค่าอื่น ๆ ใน.iniไฟล์และใช้ConfigParserเพื่ออ่านหรือใช้.jsonไฟล์และใช้โมดูลjson เก็บสำเนาของไฟล์ไว้ในเครื่องเดียวและหนึ่งไฟล์จากระยะไกลทั้งคู่อยู่ภายใต้เส้นทางเดียวกันโดยไม่มีการควบคุม SVN และเพียงเก็บเส้นทางไปยังไฟล์การกำหนดค่านั้นในสคริปต์ Python (หรือรับจากบรรทัดคำสั่งหากคุณไม่สามารถเก็บได้ทั้งคู่ การกำหนดค่าภายใต้เส้นทางเดียวกัน)

การกำหนดค่าให้เป็นขนาดเล็กที่สุด การกำหนดค่าใด ๆ เป็น "ส่วนที่เคลื่อนไหวได้" ของแอปพลิเคชันของคุณและระบบใด ๆ ที่มีความทนทานยิ่งน้อยกว่าชิ้นส่วนที่เคลื่อนไหวได้ ตัวบ่งชี้ที่ดีของสิ่งที่อยู่ในการกำหนดค่าคือคุณต้องแก้ไขทุกครั้งที่คุณย้ายรหัส สิ่งที่ไม่จำเป็นต้องแก้ไขอาจยังคงเป็นค่าคงที่ในรหัส

ทำให้การใช้งานของคุณ คุณสามารถทำได้โดยใช้สคริปต์ Bash ในเครื่องของคุณ ทราบว่าคุณสามารถเรียกใช้คำสั่งใด ๆ บนเครื่องระยะไกลsshผ่าน ตัวอย่างเช่น

svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev

## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'

เพื่อให้สามารถใช้งานได้คุณต้องมีการลงชื่อเข้าใช้แบบไม่ใช้รหัสผ่านโดยยึดตามคีย์สาธารณะ / ส่วนตัวตั้งค่าระหว่างเครื่องของคุณกับเครื่องระยะไกล

หากคุณต้องการมากกว่านี้คุณสามารถคิดของการใช้ ธผ้าหรือระดับที่สูงกว่าอาหาร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.