Pertanyaan-pertanyaan ini mungkin agak di luar topik di komputer. jika diperlukan tolong sarankan di mana itu cocok dengan.
Pertanyaannya adalah tentang bagaimana mengelola semua simulasi berjalan secara efisien.
katakanlah, misalnya, simulasi memerlukan perbaikan 2 parameter yang harus ditentukan pada rentang nilai yang disarankan.
Untuk menemukan hasil yang lebih baik yang dihasilkan oleh sepasang dari dua parameter (dengan membandingkan hasil simulasi dengan data eksperimental, misalnya), seseorang dapat melakukan analisis sensitivitas dengan menentukan tiga nilai untuk setiap parameter, kemudian merumuskan 9 run.
sebelumnya saya menggunakan sed untuk mengubah input untuk setiap proses, dan menandai setiap proses dengan menuliskan nilai dan nama parameter pada folder yang menyimpan input dan hasil dari proses ini. tapi saya menemukan ini sangat tidak efisien setelah jumlah parameter bertambah (mis. akses nama folder dalam skrip untuk merencanakan).
kemudian saya memutuskan untuk menggunakan nomor sederhana sebagai nama folder dan menyimpan detailnya dengan beberapa spreadsheet lainnya. cara ini ok sejauh ini tetapi membutuhkan kerja keras. juga dengan pertumbuhan berlari, menjadi umum untuk melakukan kesalahan, seperti melakukan lari lain yang telah dilakukan beberapa hari yang lalu.
Apakah Anda punya ide bagus tentang mengelola proses ini? Saya pikir itu akan sangat penting bagi seseorang yang melakukan analisis Monte Carlo?
Terima kasih sebelumnya!
sumber
Jawaban:
TLDR
Gunakan Python untuk mengelola / memodifikasi input Anda dan menambahkan output Anda, dan menggunakan HDF5 untuk mengatur / menyimpan data Anda. Sekompleks kelihatannya pada awalnya itu masih akan lebih sederhana daripada SQL-apa pun.
Jawaban yang lebih panjang + Contoh
Saya pribadi menggunakan kombinasi skrip Python dan format file HDF5 untuk menangani situasi semacam ini. Skrip python dapat menangani substitusi teks yang diperlukan untuk mengubah runfile Anda (dan dapat memeriksa duplikat run), dan dengan beberapa skrip lainnya Anda dapat mengambil data output dari program Anda dan memasukkannya ke file HDF5.
Sangat mudah untuk menganggap HDF5 kurang lebih persis seperti sistem file normal (yaitu sekumpulan direktori dan subdirektori pada komputer Anda), tetapi yang dapat dengan mudah diubah ke set data besar. Setiap direktori / subdirektori dapat ditandai dengan metadata (dalam kasus Anda, hanya parameter yang Anda variasikan, atau seluruh rangkaian parameter). Ketika tiba saatnya untuk menganalisis data Anda, Anda dapat mencari berdasarkan data metadata.
Berikut adalah contoh singkat bagaimana ini akan bekerja berdasarkan pada beberapa data simulasi saya (sudah dalam format HDF5) yang terlihat seperti ini:
mydata.hdf5
adalah file HDF5, dan masing-masing Runxx adalah subdirektori yang menyimpan data output dari simulasi yang diberikan, dan yang ditandai dengan metadata terkait. Skrip python yang mencari melalui proses dan mengembalikan daftar orang-orang dengan metadata yang diinginkan akan terlihat seperti ini:Jadi jika saya berada di baris perintah di direktori yang berisi
mydata.hdf5
saya bisa menjalankan skrip di atas seperti:yang akan memberi tahu skrip untuk menemukan menjalankan dengan metadata sebagian atau seluruhnya cocok
{'maxSteps':'1e7', 'size':'13'}
. Skrip kemudian dapat memanipulasi data tersebut sesuai keinginan Anda (di bagian "lakukan sesuatu di sini"), dan kemudian akan mencetak daftar yang akan terlihat seperti ini:Namun satu catatan adalah bahwa HDF5 akan menghadirkan pemetaan yang benar-benar alami untuk data Anda hanya jika memungkinkan untuk merepresentasikan data Anda sebagai satu set array n-dimensi. Ini cukup umum untuk output simulasi berada dalam semacam array, jadi ini mungkin tidak akan menjadi masalah.
Poin awal yang bagus
Python: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/
sumber
Saya pikir kita perlu tahu sedikit lebih banyak tentang alur kerja Anda untuk membuat rekomendasi serius.
Saya sarankan memperlakukan run Anda seperti toko kunci-nilai. Buat database sederhana untuk semua metadata Anda untuk setiap proses, dan kemudian hash informasi yang relevan dari proses Anda ke kunci yang Anda tetapkan untuk setiap output.
Dalam situasi paling sederhana, Anda akan menggunakan file teks untuk toko metadata Anda, dan menambahkan garis-garis metadata dengan aman tentang setiap lari ke file teks Anda. Anda kemudian dapat menyimpan keluaran Anda berjalan sesuka Anda (satu direktori, cadangan dengan daftar konten, dll ...)
Anda bisa menerapkan strategi ini dalam bahasa apa pun yang Anda suka, tetapi ini sepele dengan Python. Anda juga bisa memanfaatkan beberapa fitur bagus sebagai kemampuan Python untuk membaca dan menulis data JSON atau berinteraksi dengan database SQL.
Pendekatan ini mengimplementasikan basis data ringan yang sangat sederhana. Ada strategi yang lebih berat yang memberikan lebih banyak jaminan keamanan, yang baru Anda mungkin tertarik adalah SciDB . Basis data memberikan jaminan yang lebih kuat tentang data Anda dan membantu Anda mengukur pendekatan Anda untuk kumpulan data yang lebih besar.
sumber