Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa saya membuat TabbyAPI
Foto Muka Depan oleh Jason Leung di Unsplash
Ini adalah yang pertama dalam mungkin banyak siaran "mengapa saya membuat" yang menerangkan alasan saya untuk membuat sekeping perisian dan menyelam lebih mendalam ke dalam penambahbaikan masa hadapan.
Hari ini, saya akan menumpukan pada projek paling popular saya, TabbyAPI. TabbyAPI ialah pelayan FastAPI berasaskan python yang membenarkan pengguna berinteraksi dengan Model Bahasa Besar (atau LLM) menggunakan perpustakaan ExllamaV2 dan mematuhi spesifikasi OpenAI API.
Jika anda tidak pasti maksud mana-mana perkataan itu, anda tidak berada dalam ruang AI. Tetapi, tidak mengapa! Artikel ini bertujuan untuk menerangkan pengalaman saya tanpa melemparkan keseluruhan sinki dapur istilah AI kepada anda.
Izinkan saya kembali ke masa November 2023. AI berkembang pesat, syarikat mengeluarkan model kiri dan kanan, dan gembar-gembur nampaknya tiada penghujungnya. Nampaknya saya bercakap tentang tempoh masa pada zaman purba, tetapi ketika itu, setiap hari terasa seperti satu bulan penuh inovasi.
Dalam serangan teknologi baharu ini, saya tertumpu untuk menjalankannya dengan 3090ti yang remeh. Ya, remeh adalah perkataan yang betul untuk digunakan kerana 24GB VRAM dalam kad grafik adalah tahap permulaan untuk menjalankan kebanyakan model AI. Pada masa ini, menjalankan versi model terkuantisasi adalah perkara biasa. Pengkuantaan adalah serupa dengan pemampatan yang membolehkan pengguna menjalankan model besar ini pada GPU pengguna.
Format yang saya sukai ialah exl2, format yang memfokuskan pada kelajuan, pengoptimuman dan mendapatkan sebanyak mungkin pada kad grafik. dan token menjana pada kelajuan bunyi. Jadi format ini hebat! Apa masalahnya?
Isunya ialah menjalankan model. Exl2 ialah sebahagian daripada perpustakaan ExllamaV2, tetapi untuk menjalankan model, pengguna memerlukan pelayan API. Satu-satunya pilihan di luar sana ialah menggunakan text-generation-webui (TGW), sebuah program yang menggabungkan setiap pemuat di luar sana ke dalam webui Gradio. Gradio ialah rangka kerja UI "blok binaan" biasa untuk pembangunan python dan sering digunakan untuk aplikasi AI. Persediaan ini bagus untuk seketika, sehingga tidak.
Pada asasnya, sebab utama mencipta Tabby ialah kegusaran. Saya letih dengan jumlah kerja yang terlibat untuk memuatkan satu model. Belum lagi kos overhed daripada Gradio dan jumlah tanggungan daripada TGW. Saya menghormati pembangun, tetapi walaupun TGW bagus untuk ramai orang yang mahukan penyelesaian menyeluruh, ia tidak baik untuk saya.
Foto oleh Glenn Carstens-Peters di Unsplash
mudah. Buat pelayan API yang boleh diletakkan pada komputer saya dan tidak memerlukan banyak beban untuk dijalankan. Bunyinya mudah, tetapi bolehkah saya melakukannya? Saya tidak mempunyai banyak pengalaman dalam teori model AI, tetapi saya mempunyai banyak pengalaman membuat pelayan bahagian belakang dan memahami reka bentuk API.
Oleh itu, saya memerlukan seseorang untuk membantu, tetapi siapa? Masukkan turboderp, orang di belakang ExllamaV2. Dia cukup mengetahui segala-galanya di sebalik cara model berfungsi sejak dia membuat perpustakaan, yang merupakan gandingan yang bagus untuk pengetahuan API saya. Di samping itu, seorang lagi yang berminat bernama Splice menyertai kerana pengalamannya dengan Python. Bersama-sama, kami bertiga memulakan TabbyAPI.
Tetapi adakah rancangan itu semudah itu? Well, macam. Walaupun saya mempunyai orang untuk kerja itu, pengetahuan saya dalam Python dan pelayan API pada asasnya adalah 0. Saya akhirnya menggunakan rangka kerja pelayan web yang dipanggil FastAPI yang menjadikan hidup saya lebih mudah. Ia juga sangat popular dalam komuniti ular sawa dan didokumenkan dengan baik.
Selepas menggunakan FastAPI selama beberapa hari, saya tertarik untuk menulis kod pelayan web python. Dokumentasinya sangat baik, terdapat banyak contoh dalam talian, dan pembangun menerima maklum balas. Secara keseluruhan, komuniti mengalu-alukan dan saya suka menggunakan python untuk rangkaian dengan lebih kerap.
Selepas beberapa minggu, saya merasakan bahawa segala-galanya sudah sedia untuk digunakan secara umum dan memutuskan untuk mengeluarkan semuanya dengan cara terbaik yang saya tahu. YOLO dan tolak semuanya ke GitHub.
Apabila mengeluarkan projek sumber terbuka kepada dunia, jangkakan isu... banyak isu. Orang ramai sentiasa mempunyai kes penggunaan yang tidak sesuai dengan utiliti. Memandangkan Tabby ialah pelayan bahagian belakang, banyak kes tersebut muncul. Untuk siaran ini, saya hanya akan menyebut beberapa perkara yang sukar untuk saya tangani pada mulanya.
Titik kesakitan yang besar ialah saya melepaskan Tabby di tengah-tengah kitaran gembar-gembur RAG. RAG bermaksud "Retrieval Augmented Generation", atau menggunakan dokumen luaran sebagai tambahan kepada pengetahuan LLM apabila mendapat respons. Masalahnya ialah teknik baharu ini (seperti panggilan fungsi) memerlukan titik akhir API yang berbeza dan cara untuk menyelesaikan tugasan.
Selain itu, terdapat sedikit atau tiada dokumentasi tentang cara ciri ini sebenarnya berfungsi pada bahagian belakang. Sehingga hari ini, saya tidak melaksanakan panggilan alat OpenAI kerana saya tidak tahu cara ia berfungsi. Kekurangan dokumentasi adalah perkara biasa dalam dunia AI dan ia menyekat keupayaan pembangun untuk melaksanakan kod dalam projek mereka tanpa banyak pengumpulan maklumat terlebih dahulu.
Satu lagi isu yang berlarutan selama beberapa bulan ialah penjanaan berbilang pengguna. Ternyata pengendalian pertanyaan yang diedarkan pada pelayan bukanlah topik yang mudah untuk diselesaikan oleh pembangun. FastAPI menyediakan sokongan untuk jenis beban kerja ini, tetapi Tabby telah ditulis dengan kod segerak. Ini bermakna saya terpaksa mempelajari pengaturcaraan tak segerak dalam Python (yang tidak mudah dengan pukulan panjang).
Bahagian yang paling teruk ialah pembangun AI tidak menyukai ular sawa tak segerak manakala pelayan rangkaian menerimanya. Maksudnya ialah saya terpaksa belajar cara berkomunikasi antara perpustakaan tak segerak dan segerak dalam bentuk benang. Ini adalah penyelaman yang lebih mendalam untuk memahami isu threading Python dan sebab model tak segerak wujud di tempat pertama. Saya akan membincangkan semua ini dalam catatan blog lain, tetapi mudah-mudahan ini menerangkan jumlah pembelajaran yang perlu saya lakukan dalam tempoh 2–3 bulan semasa menangani isu ini.
Akhirnya, turbo dan saya bekerjasama untuk mencipta penjana yang lebih baik dalam pustaka ExllamaV2 yang menghilangkan semua masalah berbilang pengguna dan pepijat pelik daripada perpustakaan threading. Selepas 9 bulan, boleh dikatakan bahawa Tabby akhirnya menjadi program yang stabil untuk menjalankan model.
Foto oleh Annie Spratt di Unsplash
Sepanjang masa saya membangunkan perisian, saya tidak pernah mengalami tempoh keletihan. Sukar untuk dipercayai kerana keletihan adalah perkara biasa dalam dunia perisian, tetapi saya sentiasa mahu mengekodkan sesuatu selama 6 tahun yang lalu. Pengekodan ialah hobi kegemaran saya dan membantu saya melepaskan diri daripada tekanan hari itu.
Walau bagaimanapun, Tabby dan komuniti AI secara amnya mengubah keadaan. Pada permulaannya, saya mendapat ramai kawan dan orang yang berkongsi minat yang sama dalam meneroka bidang AI yang berkembang pesat. Komuniti saya pernah terlibat dalam panggilan suara hampir setiap hari dan menumpukan pada perkongsian projek dan idea tentang perkara baharu dalam ruang. Ia menjadikan pembangunan menyeronokkan dan menyeronokkan kerana saya dapat bergaul dengan orang yang berfikiran sama dan berkongsi idea baharu.
Malangnya, panggilan suara itu mula kurang orang dan berlaku kurang kerap. Saya juga mengalami banyak tekanan kerana menamatkan tahun pertama saya di sekolah perubatan. Dalam dunia dalam talian, ini adalah tempoh kesunyian yang besar untuk saya dan membangunkan Tabby berasa seperti beban di atas kehidupan pelajar perubatan saya. Akhirnya, peristiwa ini memuncak dengan kekecewaan dan keletihan yang besar. Untuk menyelesaikannya, saya memutuskan untuk berehat selama-lamanya daripada AI.
Semasa rehat saya, saya menghabiskan masa jauh dari Tabby dan menghabiskan lebih banyak masa menikmati percutian musim panas saya. Saya sebenarnya bekerja pada beberapa projek aplikasi iOS yang lebih lama dan menghabiskan masa bersama keluarga saya. Pada masa kini, saya kembali membangunkan Tabby sekali lagi. Panggilan suara yang pernah saya sertai mungkin tidak akan berlaku untuk masa yang lama kerana gembar-gembur AI yang semakin pudar. Ia adalah pil yang sukar untuk ditelan, tetapi saya telah menemui motivasi yang berbeza untuk meneruskan pembangunan.
Tabby ialah projek LLM pertama yang pernah saya buat. Ia entah bagaimana menjadi nama yang popular dalam komuniti dan saya dilemparkan ke bahagian pengurusan yang mendalam. Mengetahui itu, berikut adalah beberapa pemikiran yang saya pelajari daripada pengalaman ini.
Ketahui siapa yang anda ingin layani: Sesiapa sahaja boleh menggunakan projek sumber terbuka. Untuk Tabby, saya mengutamakan ciri yang akan memberi manfaat kepada kemudahan penggunaan projek, rakan saya dan saya sendiri. Dengan mengekalkan falsafah ini, saya boleh mengurus jadual saya dan saya akan tahu ciri yang perlu diusahakan.
Fahami had anda: Burnout tidak menyeronokkan. Jangan lakukan apa yang saya lakukan dan jatuhkan diri anda kerana pengguna mempunyai masalah untuk kesekian kalinya. Jika perasaan kecewa, marah, atau bosan muncul, berehat. Ia bagus untuk berehat sekali-sekala.
Jangan berpaling ke belakang untuk semua orang: Idea mungkin kelihatan bagus apabila ia mula-mula dibentangkan, tetapi orang ramai tidak faham bahawa pembangun perlu mengekalkan ciri ini selepas itu. Jika ia menyakitkan dan tidak banyak digunakan, ciri itu tidak akan dikekalkan dan akan menjadi hutang teknologi. Ingat bahawa orang asing rawak di internet sentiasa mempunyai idea. Terpulang kepada anda atau pasukan anda untuk memutuskan yang mana satu untuk memberikan kuasa otak.
Buat sesuatu yang anda suka dan nikmati: Pembangun sering kehilangan keseronokan pada projek kerana penyelenggaraan boleh menyusahkan dan mengambil masa yang lama. Ini benar terutamanya jika pembangun tidak lagi menggunakan projek secara aktif. Fikirkan apakah motivasi anda, dan jika ia berubah, tidak mengapa.
Saya mungkin akan menghuraikan perkara ini dalam artikel lain kerana ini boleh menjadi topiknya sendiri, tetapi saya merasakan bahawa bekerja pada Tabby telah memberi saya lebih banyak cerapan tentang cara saya mahu projek saya berfungsi. Di samping itu, pengetahuan saya tentang komuniti sumber terbuka telah diperluaskan.
Saya berterima kasih kepada semua orang yang menyumbang dan memberi cadangan setiap hari untuk menambah baik TabbyAPI dan ExllamaV2. Semua orang membantu memperhalusi dan menambah baik program agar berfungsi dengan lebih baik untuk kegunaan umum. Saya seorang sahaja dan membantu memerlukan banyak perkara.
Untuk masa hadapan yang boleh dijangka, saya akan mengurangkan jumlah saya bekerja pada Tabby. Projek ini masih berjalan dengan kukuh dan ramai yang komited untuk memperbaikinya, tetapi kesihatan mental saya lebih penting dan berehat akan membantu dengan itu.
Terima kasih kerana membaca retrospektif ini. Jika anda ingin mengetahui lebih lanjut tentang saya dan perkara yang saya lakukan, sila lawati kingbri.dev.
Tapak web peribadi Brian Dashore
Penting
Selain README, sila baca halaman Wiki untuk mendapatkan maklumat tentang permulaan!
Nota
Perlukan bantuan? Sertai Pelayan Discord dan dapatkan peranan Tabby. Sila bersikap baik apabila bertanya soalan.
Aplikasi berasaskan FastAPI yang membenarkan penjanaan teks menggunakan LLM (model bahasa besar) menggunakan hujung belakang Exllamav2
Projek ini ditanda keluaran bergulir. Mungkin terdapat pepijat dan perubahan di bawah talian. Harap maklum bahawa anda mungkin perlu memasang semula kebergantungan jika perlu.
TabbyAPI ialah projek hobi semata-mata untuk sebilangan kecil pengguna. Ia tidak dimaksudkan untuk dijalankan pada pelayan pengeluaran. Untuk itu, sila lihat bahagian belakang lain yang menyokong beban kerja tersebut.
Penting
README ini bukan untuk bermula. Sila baca Wiki.
Baca Wiki untuk mendapatkan maklumat lanjut. Ia mengandungi dokumentasi yang dihadapi pengguna untuk pemasangan, konfigurasi, pensampelan, penggunaan API dan banyak lagi.
Atas ialah kandungan terperinci Mengapa saya membuat TabbyAPI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!