Gaussian 03 không thể chạy 4 processors

Các bạn giúp mình giải quyết vấn thế này: Mình dùng cpu quad core (2.8 GHz) để chạy Gaussian 03 và bỏ trống mục “%section” thì Gaussian hiểu là chỉ chạy 1 core. Nhưng khi mình cài %nproc=4 thì Gaussian 03 báo lỗi “processor number 1 failed to complete”. Tìm phương án giải quyết mấy ngày nay không ra nên mong các bạn và thầy cô giúp mình xem vì chạy 1 core tốn nhiều thời gian quá. Cám ơn nhiều.

Chính xác là lỗi ‘process number 1 failed to complete’.

Bình thường thì thế này: Nếu sử dụng %nproc=n, %mem=2000MB (2Gb) chẳng hạn, thì mỗi processor sẽ có sẳn 2/n Gb để sử dụng cho việc tính toán (gọi là process 1). Nếu công việc tính toán ở thời điểm nào đó trong quy trình cần dung lượng bộ nhớ cao hơn cho mỗi processor, thì hệ thống sẽ tự động nâng cao số processor (n) lên gấp đôi, tức là 2n, để phục vụ tiếp cho việc tính toán (lúc này 2n processors sẽ cần 2n.2/n=4Gb) (gọi là process 2). Khi process 2 thực hiện xong công việc của mình, hệ thống sẽ chuyển về process 1 và chạy tiếp (gọi là cycles, nhỉ?) cho tới khi process 1 complete (sau khi đã trải qua nhiều vòng lặp và nhiều lần hoán vị giữa 2 process: 1 và 2).

Có những công việc không qua process 2 mà chỉ cần chạy ở process 1 cũng có thể hoàn thành, tùy vào công việc, cách thiết lập bộ nhớ và hệ tính toán. Ví dụ: em tối ưu hình học propen, cần 30 basis functions cho 11 optimization cycles. Giả sử, công việc tính toán tại thời điểm nào đó trong quy trình đòi hỏi bộ nhớ cao nhất là x= 0,5Gb cho 1 processor. Như vậy, nếu sử dụng %nproc=4, nghĩa là chạy 4 processors song song, thì bộ nhớ (%mem) khai ban đầu phải ít nhất là 2Gb. Còn nếu x lớn hơn mà em vẫn giữ %nproc=4, %mem=2000MB như khi thiết lập cho process 1 thì nó sẽ chuyển qua process 2, lúc này sẽ sinh lỗi thiếu bộ nhớ và hệ thống trả tự động về process 1, kèm theo thông báo lỗi như bác đã gặp ở trên (do process 1 chưa hoàn thành).

Cách khắc phục duy nhất là giảm n, giảm mức lý thuyết, tăng %mem lên mức tối đa có thể có. Nếu máy tốt có thể chuyển qua linux, kết nối các máy khác, chạy simple processor cho như nhiều hệ thống tính toán ở HNUE cũng là một cách.

Hình minh họa: Chúc bác may mắn! Thân!

Như vậy theo bác nói Thứ nhất: sử dụng %mem tối đa có thể Thứ hai: tùy theo calculation method, basis set, hoặc độ phức tạp cấu trúc mình sẽ tăng %nproc lên. Bác cho ý kiến xem về bài toán của mình như sau: Cấu trúc máy tính của mình là: core quad 2.83 GHz, RAM 3GB, Bài toán mình cân giải là tối ưu hóa cấu trúc hình học của complex bao gồm 1 monomer và 1 molecule, tổng cộng khoảng 100 atoms. Mình chạy với B3LYP/6-31g(d) opt mà không set %nproc hay %mem gì cả thì nó ngốn mình hết gần 10 ngày.

Bác làm bên vật liệu à?

Bài toán mình cân giải là tối ưu hóa cấu trúc hình học của complex bao gồm 1 monomer và 1 molecule, tổng cộng khoảng 100 atoms.

Bộ hàm B3LYP là thuộc loại dễ hội tụ nhất rồi. Ý bác là một polimer với 1 molecule? Có thuộc nhóm đối xứng nào khác c1 không? Chắc là không nhỉ! Nếu vậy thì cũng sẽ chạy lâu hơn cấu trúc đối xứng. Với những cấu trúc bất đối xứng, em thường chạy nhiều step, từ nhỏ nhất trở đi, tình hình có vẻ nhanh và ít lỗi hội tụ & lỗi bộ nhớ hơn.

Mình chạy với B3LYP/6-31g(d) opt mà không set %nproc hay %mem gì cả thì nó ngốn mình hết gần 10 ngày.

Không set %nproc & %mem thì hệ thống hiểu %nproc=1, %mem sử dụng đến mức tối đa. Con Core quad 2.83 GHz, RAM 3GB của bác thì cũng mạnh nhưng vừa phải thôi. Vậy nên, chạy với gần 100 atoms thì lâu vậy cũng đúng (em lại nghĩ phải lâu hơn). Em hồi làm hấp phụ bề mặt đã từng chạy hệ gần 70 nguyên tử thôi (đối xứng), dùng B3LYP/6-311+g(d,p) và đã mất hơn 7 ngày. Máy của em là core i7, ram 8gb, 4 x 1.60GHz. Em dùng %nproc=2, %mem=7000MB. Bác thấy đấy, tăng %nproc lên gấp đôi không có nghĩa là tốc độ tăng gấp đôi. Cơ chế cụ thể em cũng chưa rõ, đang nghiên cứu và cũng đang lập mấy cái biểu bảng theo dõi về vấn đề này.

Vấn đề là bác muốn tăng tốc độ lên, đúng không ạ? Bây giờ, nếu %nproc#1 thì phải set %mem. Ram ban đầu 3gb, trừ khoảng 500mb cho các chương trình khác, còn lại 2,5gb. Với dung lượng ram hiện có và hệ thống tính toán như vậy, nếu tăng %nproc lên bằng 2 thôi thì em nghĩ cũng sẽ bị lỗi ngay. Đối với hệ của bác, với mức lý thuyết như vậy, em đoán khoảng 3000-4000 basis functions, nghĩa là rất lớn. Bây giờ nhanh hay chậm phụ thuộc vào số optimization cycles (n). Nếu thiết kế ban đầu của bác càng gần với cấu trúc tối ưu thì n sẽ càng bé, như vậy thời gian tối ưu sẽ giảm xuống. Do vậy, em khuyên bác:

  1. Nên chạy nhiều mức, với step đầu ở mức thấp (nếu bác đã mức cao hơn mà bị lỗi) để dự đoán hình học gần đúng trước, các step sau bác sử dụng hình học đó để tối ưu tiếp (cấu trúc câu lệnh chắc bác đã nắm được rồi nhỉ?).
  2. Nếu muốn tăng %nproc lên để thử nghiệm thì thay %nproc bằng %nprocs - bộ nhớ chia sẻ (shared memory), và chỉ nên tăng lên bằng 2 thôi.
  3. %mem sử dụng tối đa. Nếu có vài cái USB thì format trước sau đó cắm hết vào máy, sử dụng phần mềm Eboostr, bản crack tải trên mạng về cài đặt để tạo bộ nhớ đệm. Điều này sẽ làm tăng tốc độ khá đáng kể ngoài việc giảm lỗi thiếu bộ nhớ trong quá trình chạy.
  4. Nếu bác định tính tần số (freq) sau khi tối ưu (opt) thì em khuyên nên giảm mức lý thuyết xuống một tẹo, HF chẳng hạn, nếu không nhất thiết phải sử dụng lý thuyết DFT; DFT theo em biết dễ hội tụ nhưng cho hình học không tốt bằng HF. Em đoán nếu bác tính tần số với mức lý thuyết đó, hệ thống đó thì sẽ sinh lỗi. Đoán thôi, hi hi.

Chỉ có thể đưa ra vài điều chia sẻ mang tính chất tham khảo như vậy thôi.

Chúc bác may mắn, Thân!

Mình cũng chạy theo trình tự như bác nói và khảo sát nhiều lần với các trình tự khác thì cách giống của bác là tốt nhất, cụ thể là

  1. Mình chạy opt hf/3-21g trước, cái này thì dễ hội tụ
  2. Chạy opt=readfc hf/3-21g để tìm initial force constant
  3. Chạy mức b3lyp/6-31g(d) Với cách này thời gian nhanh và kết quả tốt Giờ chỉ còn cách dành tiền mua thêm ram thôi bác nhỉ.

Trước em có làm theo cách này, cũng khá hiệu quả. Nếu mua ram được thì tốt hơn.