Làm việc với các cụm HPC


11

Trong trường đại học của tôi, chúng tôi có một cụm máy tính HPC. Tôi sử dụng cụm để đào tạo phân loại và như vậy. Vì vậy, thông thường, để gửi một công việc đến cụm, (ví dụ: tập lệnh python scikit-learn), tôi cần phải viết một tập lệnh Bash chứa (trong số các tập lệnh khác) một lệnh như thế nào qsub script.py.

Tuy nhiên, tôi thấy quá trình này rất rất bực bội. Thông thường những gì xảy ra là tôi viết tập lệnh python trên máy tính xách tay của mình và sau đó tôi đăng nhập vào máy chủ và cập nhật kho lưu trữ SVN, vì vậy tôi nhận được tập lệnh python tương tự ở đó. Sau đó, tôi viết tập lệnh Bash đó hoặc chỉnh sửa nó, để tôi có thể chạy tập lệnh bash.

Như bạn thấy điều này thực sự gây khó chịu vì, với mỗi bản cập nhật nhỏ cho tập lệnh python, tôi cần thực hiện nhiều bước để thực hiện nó tại cụm máy tính. Tất nhiên nhiệm vụ thậm chí còn phức tạp hơn khi tôi phải đưa dữ liệu lên máy chủ và sử dụng đường dẫn của bộ dữ liệu trên máy chủ.

Tôi chắc rằng nhiều người ở đây đang sử dụng các cụm máy tính cho các nhiệm vụ khoa học dữ liệu của họ. Tôi chỉ muốn biết làm thế nào các bạn quản lý gửi công việc đến các cụm?


1
Ah, niềm vui của việc triển khai ... được tăng cường bởi niềm vui của các hệ thống phân tán :)
logc

Câu trả lời:


5

Yêu cầu quản trị viên lưới của bạn thêm máy cục bộ của bạn làm "máy chủ gửi" và cài đặt SGE (mà chúng tôi cho rằng bạn đang sử dụng, bạn không thực sự nói) để bạn có thể qsubtừ máy của mình.

HOẶC LÀ....

Sử dụng emacs, sau đó bạn có thể chỉnh sửa trên HPC của mình thông qua các phương tiện kết nối ssh "tramp" của emacs và giữ một vỏ mở trong cửa sổ emacs khác. Bạn không nói trình soạn thảo / hệ điều hành nào bạn muốn sử dụng. Bạn thậm chí có thể định cấu hình emacs để lưu tệp ở hai nơi, vì vậy bạn có thể lưu vào máy cục bộ của mình để chạy thử nghiệm và hệ thống tệp HPC đồng thời cho các công việc lớn.


4

Có nhiều giải pháp để giảm bớt gánh nặng sao chép tệp từ máy cục bộ sang các nút tính toán trong cụm. Một cách tiếp cận đơn giản là sử dụng một giao diện cho phép đa truy cập vào các máy trong cụm, như cl clustersh (cssh). Nó cho phép bạn gõ lệnh cho nhiều máy cùng một lúc thông qua một bộ màn hình đầu cuối (mỗi máy một kết nối ssh với một máy khác nhau trong cụm).

Vì cụm của bạn dường như đã qsubđược thiết lập, vấn đề của bạn có thể liên quan đến việc sao chép dữ liệu dọc theo các máy (ngoài việc đơn giản là chạy một lệnh trong mỗi nút). Vì vậy, để giải quyết vấn đề này, bạn có thể viết một scptập lệnh, sao chép mọi thứ đến và từ mỗi nút trong cụm (điều này chắc chắn được giải quyết tốt hơn với SVN) hoặc bạn có thể thiết lập NFS. Điều này sẽ cho phép truy cập dữ liệu đơn giản và minh bạch và cũng giảm nhu cầu sao chép dữ liệu không cần thiết.

Ví dụ: bạn có thể truy cập vào một nút, sao chép dữ liệu đến nơi đó và chỉ cần sử dụng dữ liệu từ xa , thông qua giao tiếp mạng. Tôi không biết cách thiết lập NFS, nhưng bạn đã có quyền truy cập vào nó (trong trường hợp thư mục nhà của bạn giống với các máy bạn truy cập). Sau đó, các tập lệnh và dữ liệu có thể được gửi đến một nơi duy nhất và sau đó được truy cập từ những người khác. Điều này gần giống với phương pháp của SVN, ngoại trừ nó minh bạch / đơn giản hơn.


4

Cách tiếp cận của bạn về việc sử dụng kho lưu trữ phiên bản nguồn là một cách tốt và nó thực sự cho phép bạn cũng làm việc trên cụm và sau đó sao chép mọi thứ trở lại.

Nếu bạn thấy mình thực hiện các chỉnh sửa nhỏ cho tập lệnh Python trên máy tính xách tay của mình, sau đó cập nhật thư mục SVN của bạn trên cụm, tại sao không làm việc trực tiếp trên giao diện cụm, thực hiện tất cả các chỉnh sửa nhỏ cần thiết và vào cuối ngày, hãy cam kết tất cả mọi thứ ở đó và cập nhật trên máy tính xách tay của bạn?

Tất cả những gì bạn cần là làm quen với môi trường ở đó (HĐH, trình soạn thảo, v.v.) hoặc cài đặt môi trường của riêng bạn (tôi thường cài đặt trong thư mục nhà của tôi phiên bản mới nhất của Vim , Tmux , v.v. với các dotfiles thích hợp để tôi cảm thấy nhà đó.)

Ngoài ra, bạn có thể phiên bản dữ liệu của mình và thậm chí cả kết quả trung gian nếu kích thước cho phép. Các kho lưu trữ của tôi thường bao gồm mã, dữ liệu (phiên bản gốc và đã được làm sạch), tài liệu và nguồn giấy để xuất bản (latex)

Cuối cùng, bạn có thể viết kịch bản trình công việc của mình để tránh sửa đổi tập lệnh theo cách thủ công. qsubchấp nhận một tập lệnh từ stdin và cũng chấp nhận tất cả các #$nhận xét dưới dạng đối số dòng lệnh.


3

Từ cách đặt câu hỏi của bạn, tôi giả sử rằng bạn có một máy cục bộ và một máy từ xa nơi bạn cập nhật hai tệp - tập lệnh Python và tập lệnh Bash. Cả hai tệp đều nằm dưới sự kiểm soát của SVN và cả hai máy đều có quyền truy cập vào cùng một máy chủ SVN.

Tôi xin lỗi tôi không có bất kỳ lời khuyên cụ thể nào cho hệ thống lưới của bạn, nhưng hãy để tôi liệt kê một số điểm chung mà tôi thấy quan trọng đối với bất kỳ triển khai nào.

Giữ thay đổi sản xuất giới hạn thay đổi cấu hình . Bạn viết rằng bạn phải "sử dụng đường dẫn của bộ dữ liệu trên máy chủ"; điều này nghe có vẻ như bạn có các đường dẫn được mã hóa vào tập lệnh Python của bạn. Đây không phải là một ý tưởng tốt, chính xác bởi vì bạn sẽ cần thay đổi các đường dẫn đó trong mọi máy khác nơi bạn di chuyển tập lệnh tới. Nếu bạn cam kết những thay đổi đó trở lại SVN, thì trên máy cục bộ của bạn, bạn sẽ có các đường dẫn từ xa và bật và tắt ... (Điều gì xảy ra nếu không chỉ có đường dẫn, mà còn cả mật khẩu? Bạn không nên có mật khẩu sản xuất trong SVN người phục vụ.)

Vì vậy, hãy giữ các đường dẫn và thông tin thiết lập khác trong một .initệp và sử dụng ConfigParser để đọc nó, hoặc sử dụng một .jsontệp và sử dụng mô-đun json . Giữ một bản sao của tệp cục bộ và một bản sao từ xa, cả hai cùng một đường dẫn, cả hai đều không có kiểm soát SVN và chỉ giữ đường dẫn đến tệp cấu hình đó trong tập lệnh Python (hoặc lấy nó từ dòng lệnh nếu bạn không thể giữ cả hai cấu hình theo cùng một đường dẫn).

Giữ cấu hình càng nhỏ càng tốt . Bất kỳ cấu hình nào cũng là "phần chuyển động" của ứng dụng của bạn và bất kỳ hệ thống nào mạnh hơn thì nó càng có ít phần chuyển động. Một chỉ báo tốt về một cái gì đó thuộc về cấu hình chính xác là bạn phải chỉnh sửa nó mỗi khi bạn di chuyển mã; những thứ không cần chỉnh sửa có thể vẫn là hằng số trong mã.

Tự động hóa việc triển khai của bạn . Bạn có thể làm điều đó thông qua tập lệnh Bash trên máy cục bộ của bạn; lưu ý rằng bạn có thể chạy bất kỳ lệnh trên một máy từ xa thông qua ssh. Ví dụ:

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'

Để làm việc này, tất nhiên bạn cần phải đăng nhập không cần mật khẩu , dựa trên khóa chung / riêng, được thiết lập giữa máy cục bộ và máy từ xa.

Nếu bạn cần nhiều hơn thế, bạn có thể nghĩ đến việc sử dụng Python's Fabric hoặc các món ăn cao cấp hơn .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.