Saat ini kami memiliki setidaknya satu ketergantungan perpustakaan pihak ketiga (xgboost) dan satu lagi dalam perjalanan (catboost #247). Masalah ini melacak mencari tahu bagaimana kami menyajikannya kepada pengguna.
Pertanyaan:
Pikiran saya saat ini adalah bahwa kode @angela97lin menambahkan di catboost PR adalah awal yang baik, yaitu kita memiliki setiap estimator atau komponen melempar kesalahan ketika perpustakaan yang mendasarinya hilang. Tapi saya pikir kita bisa melakukan lebih dari itu juga. Kami dapat menangkap kesalahan itu di automl, melewati saluran yang dimaksud, mungkin mencetak peringatan, dan melanjutkan pencarian. Kami juga dapat meminta pengguna untuk menginstal deps pihak ketiga secara default, dengan memasukkan mereka ke dalam requirements.txt
, yang seharusnya mencakup sebagian besar kasus.
Menambahkan komentar terkait yang dibuat di #247 untuk menyimpan semuanya di satu tempat:
Catatan @jeremyliweishih kita harus memutuskan apakah hal semacam ini ada dalam lingkup proyek pipa atau jika kita ingin menyepaknya
Saya pikir itu harus menjadi masalah satu kali saja dan bukan bagian dari persyaratan untuk proyek pipa karena tidak ada banyak ikatan dengan bagian lain dari proyek. Kami selalu dapat menambahkan proyek pipa sebagai pemblokir untuk perbaikan jangka panjang dan menyertakan tambalan sederhana (termasuk semua deps pihak ketiga sejauh ini) terlebih dahulu.
Terdengar bagus untukku. Dalam hal ini saya pikir kita harus mempertimbangkan ini sebagai pemblokiran pada proyek pipa, karena solusinya dapat berubah tergantung pada apa yang kita ubah tentang pipa
@kmax12 :
Naluri saya di sini adalah bahwa kita harus menyelesaikan proyek pipa fase 1 yang sedang dikerjakan @jeremyliweishih , kemudian kembali ke masalah ini dan membangun cara berkelanjutan untuk membuat dependensi pihak ketiga opsional.
Dan sampai saat itu, kami dapat terus menggabungkan hal-hal seperti #247 (yang menambahkan deps pihak ketiga baru ke requirements.txt tetapi juga menambahkan penanganan kesalahan yang belum sempurna sebagai fallback), dengan pemahaman kami akan melingkari kembali dan menjadikannya opsional saat kami mengatasi masalah ini.
Apakah Anda punya pendapat tentang rencana itu?
@kmax12 mengatakan dalam rapat hari ini:
pip install eval[complete]
. Dan evaluasiimport_or_raise
berguna untuk digunakan, seperti yang dilakukan Angela di catboost PRMenambahkan catatan tambahan dari komentar yang dibuat di #247 :
@dsherry menyebutkan cb_error_msg
(pesan kesalahan muncul saat catboost tidak diinstal) dan pesan serupa lainnya dapat menjadi atribut dari Estimator. Misalnya, kita dapat melakukan hal berikut:
Saya pikir itu bahkan bisa berharga di level ComponentBase
sehingga komponen apa pun yang membutuhkan perpustakaan pihak ketiga dapat menggunakan kerangka kerja ini.
Saya akan mencoba untuk menjatuhkan ini minggu ini. Langkah selanjutnya adalah membuat daftar permintaan dan perilaku yang diinginkan, dan memutuskan API.
@rwedge dan saya membahas ini kemarin.
Latar belakang konfigurasi instalasi melalui setuptools
Setuptools mendukung "ekstra" yang dapat kita gunakan untuk melakukan sesuatu seperti pip install evalml[complete]
yang dapat dikonfigurasi untuk menginstal paket tambahan selain pip install evalml
.
Perhatikan tampaknya mekanisme ini mendukung penginstalan paket tambahan, dan berpotensi memperbarui versi paket yang diinstal sebelumnya, tetapi tidak menghapus paket. Tidak apa-apa.
Opsi instalasi
Berikut beberapa cara kami dapat menggunakan ekstra pip untuk mengatur ulang dependensi yang diperlukan untuk mengecualikan lib pihak ketiga secara opsional:
evalml
: hanya menginstal sklearn. evalml[complete]
: juga termasuk pihak ketiga (xgboost/catboost)evalml
: tidak melakukan apa-apa / kesalahan. evalml[minimal]
: hanya menginstal sklearn. evalml[complete]
: juga termasuk pihak ketiga.evalml
menyertakan pihak ketiga tetapi evalml[minimal]
tidak, tetapi tidak yakin.Opsi 1 terasa paling menarik. Saya tidak mengetahui adanya opsi bagus untuk menangani hal ini selain tetap menggunakan penyiapan alat penyiapan kami saat ini.
Opsi dukungan kode
Tidak harus saling eksklusif:
import_or_raise
pada waktu yang tepat; memiliki kegagalan automl lewatiOpsi 1 terasa terbaik bagi saya.
Pertanyaan untuk dipertimbangkan
pip install
? Kita harus memiliki cakupan tes untuk keduanya.Usul
pip install evaml
tidak akan menginstalnya tetapi pip install evalml[complete]
akan menginstalnya.import_or_raise
(sudah selesai)import_or_raise
gagal.Keuntungan: Memungkinkan pengguna untuk menginstal evalml tanpa perpustakaan pihak ketiga.
Kekurangan: Instalasi default tidak sekuat itu. Kami harus mendukung dua versi penginstalan. Bisa jadi jelek menyiapkan automl untuk melewati jalur pipa yang gagal.
Untuk jangka panjang, alangkah baiknya jika kita bisa menemukan solusi yang memunculkan error atau warning lebih awal dari fit-time.
@kmax12 apakah Anda punya pendapat tentang masalah ini?
Saya melakukan tinjauan semua dependensi di requirements.txt
. Saya menyertakan ukuran direktori lib
setiap perpustakaan di virtualenv di mac saya, untuk mengukur kepentingannya.
Paket yang dibutuhkan oleh evalml dan akan cukup sulit untuk dibuat opsional:
Paket yang berpotensi dihapus:
Kesimpulan: kami dapat mengurangi ukuran penginstal banyak jika kami membuat lebih banyak hal opsional.
Apakah ini memengaruhi rencana kami untuk menangani saluran pipa pihak ketiga? Kami dapat bergerak untuk mendukung beberapa tambahan:
pip install evalml
: minimal saja, tidak ada cetak biru pihak ketiga, tidak ada plot, tidak ada dukungan terdistribusipip install evalml[thirdparty]
: sertakan cetak biru pihak ketigapip install evalml[plotting]
: minimal, ditambah plotingpip install evalml[distributed]
: minimal, ditambah dukungan terdistribusipip install evalml[plotting,distributed,thirdparty]
atau pip install evalml[complete]
: sertakan semuanyaIni akan bekerja dengan baik. Meski rasanya terlalu rumit. Dan itu menimbulkan kekhawatiran tentang pengujian: kami setidaknya memerlukan pengujian integrasi untuk masing-masing untuk memastikan perpustakaan bekerja dengan subset deps.
Alternatifnya adalah hanya mendukung dua target, default minimal dan complete
yang mencakup yang lainnya. Pengguna kemudian dapat menginstal dependensi tertentu dengan tangan jika mereka menginginkan subset dari complete
.
Solusi didiskusikan dengan @kmax12 :
pip install --no-dependencies evalml
lalu instal deps tertentu secara manualOpsi untuk dipertimbangkan untuk jangka panjang: buat dua paket setup.py
: evalml-base
minimal dan evalml
semuanya.