Mengapa hasil kami untuk 3.6 dan 3.7 konsisten tetapi tidak 3.5?
Masalah ini mungkin dapat ditangani dengan Dict() di 3.5 yang memiliki urutan penyisipan.
Kita harus menulis ringkasan di sini tentang apa yang tampaknya tidak konsisten
Sepertinya saya tidak dapat menemukan tiket lain tetapi masalah ini mungkin juga terkait/memperbaiki inkonsistensi CircleCI dengan paralelisasi di 3.5.
Kesalahan yang bisa muncul dapat ditemukan di sini .
Keren terima kasih.
Apa yang saya lihat di log adalah bahwa beberapa pengujian unit kami gagal pada python 3.5 tetapi masih meneruskan 3.6 dan 3.7.
Masalah ini mungkin dapat ditangani dengan Dict() di 3.5 yang memiliki urutan penyisipan.
Itu masuk akal.
Pertanyaan/tugas berikutnya:
Saya mulai mencari tahu ini.
Ringkasan : dapat melakukan repro tidak dapat diandalkan/kadang-kadang. Masih belum yakin dengan akar masalahnya.
Dari memilah-milah hasil CircleCI, sepertinya ini terjadi sebagian kecil dari waktu. Mungkin 10-20%.
Catatan: Saya mengajukan #311 untuk melacak beberapa pesan peringatan yang saya lihat di unit test. Mungkin terkait, tidak pasti.
Jejak tumpukan
evalml/tests/automl_tests/test_auto_regression_search.py:83:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
evalml/automl/auto_base.py:165: in search
self._do_iteration(X, y, pbar, raise_errors)
evalml/automl/auto_base.py:261: in _do_iteration
raise e
evalml/automl/auto_base.py:258: in _do_iteration
score, other_scores = pipeline.score(X_test, y_test, other_objectives=self.additional_objectives)
evalml/pipelines/pipeline_base.py:257: in score
y_predicted = self.predict(X)
evalml/pipelines/pipeline_base.py:205: in predict
return self.estimator.predict(X_t)
evalml/pipelines/components/estimators/estimator.py:17: in predict
return self._component_obj.predict(X)
test_python/lib/python3.5/site-packages/sklearn/ensemble/_forest.py:782: in predict
for e in self.estimators_)
test_python/lib/python3.5/site-packages/joblib/parallel.py:1004: in __call__
if self.dispatch_one_batch(iterator):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
...
> islice = list(itertools.islice(iterator, big_batch_size))
E ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.
test_python/lib/python3.5/site-packages/joblib/parallel.py:808: ValueError
Beberapa kemungkinan
test_python/lib/python3.5/site-packages/sklearn/ensemble/_forest.py:782
(yang, jika saya mendapatkan versi yang benar, ada di sini ). Versi sklearn yang digunakan oleh CircleCI untuk py3.5 adalah 0.22.1.Barang yang saya coba I
Saya mengambil pekerjaan "linux python 3.5 unit test" yang gagal ini dan menggunakan "jalankan ulang dengan SSH" CircleCI (sangat berguna). Begitu masuk, saya mengaktifkan test_python
venv dan menjalankan pytest cmd yang dipicu oleh make circleci-test
Saya mencoba menjalankan beberapa unit test yang gagal secara individual, tanpa hasil. Hanya ketika saya menjalankan semuanya sekaligus, saya dapat mengulangi beberapa kegagalan. Tetapi tes yang gagal berubah sedikit setiap kali dan tampaknya tidak dapat diprediksi.
Langkah selanjutnya
Bukan penyebabnya
-n
di pytest. Mungkin masalah ini mengekspos bug dalam cara pytest memutar pekerja paralel - tunggu, tidak apa-apa, karena tes ini gagal sebelum -n
ditambahkan oleh Jeremy di cabangnyadalam hal kebutuhan untuk mendukung 3.5...
saat ini 5-10% unduhan fitur alat kami berasal dari python 3.5. saya juga melihat beberapa perpustakaan terkait ml lainnya
scikit-belajar: ~10%
panda: 10-15%
xgboost: 20-30%
numpy: 10%
jadi, saya pikir ya, kita harus mencoba mendukungnya karena ada orang yang menggunakannya. jika mempertahankannya memperlambat kita secara drastis, kita bisa meninjaunya kembali.
checkout paket apa pun yang Anda inginkan di sini: https://pypistats.org/packages/pandas
Baru saja melihat contoh lain dari kegagalan ini pada PR saya, di sini . Itu belum hilang secara ajaib :) kita harus segera menggali ini
Kami menghapus dukungan untuk python 3.5 di #435.
Tapi perhatikan @ angela97lin menyebutkan dia melihat kegagalan ini pada python 3.6 Memperbarui nama masalah agar sesuai.
RE berkomentar di #435, saya ingin tahu apakah masalah ini ada hubungannya dengan penggunaan OrderedDict kami... mungkin tidak, hanya menambah daftar kemungkinan.
@ angela97lin apakah Anda memiliki info / tautan / repro dengan kegagalan 3.6 yang Anda lihat? Apakah itu lokal atau di circleci?
Tentu! Saya hanya mengalaminya melalui PR random_state saya untuk python 3.6, jadi saya sudah mencoba men-debug. Ini PR-nya: #431
Dari utas Slack:
Dugaan saya adalah itu harus melakukan sesuatu dengan n_jobs=-1 karena dalam jejak tumpukan, kami mendapatkan ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.
; kemungkinan ketika n_jobs=-1, argumen stop yang diteruskan menjadi negatif dan memicu pengecualian ini. Kesalahan hilang ketika n_jobs bilangan bulat positif.
Inilah lari di mana saya mengalami ini: https://app.circleci.com/jobs/github/FeatureLabs/evalml/12366
Tampaknya hanya terjadi di CircleCI, jadi saya ingin tahu apakah itu ada hubungannya dengan masalah ini?
Status
Kami dapat mereproduksi ini di python 3.6 di @angela97lin 's PR #441. Kegagalan Circleci ada di sini . Kami tidak dapat melakukan repro dengan menjalankan tes individual, harus menjalankan semuanya.
Kami sebelumnya melihat kegagalan ini hanya pada python 3.5. Sekarang Angela mengutak-atik random_state menyebabkan ini gagal hanya pada python 3.6. Ini membuat saya berpikir ada kondisi balapan yang berkaitan dengan urutan panggilan ke generator nomor acak. Cukup membantu karena tampaknya gagal secara konsisten pada python 3.6 di cabang random_state Angela.
Langkah selanjutnya
unit_tests
circleci config untuk membatasi pekerjaan pengujian hingga 8 cpus: docker:
- command: ['--cpuset', '0-7']
Kita harus mengevaluasi kembali jika ini masih menjadi masalah sekarang setelah @christopherbunn bergabung #407
Saya belum melihat masalah ini sejak #407 digabungkan. Penutupan.