AI Ejen kini menjadi medan hangat Dalam artikel panjang [1] yang ditulis oleh LilianWeng, pengarah penyelidikan aplikasi OpenAI, beliau mencadangkan konsep Ejen = LLM + ingatan + kemahiran merancang + penggunaan alat# Rajah. 1 Gambaran keseluruhan sistem ejen autonomi berkuasa LLM
Peranan Ejen ialah menggunakan pemahaman bahasa yang berkuasa LLM dan keupayaan penaakulan logik untuk memanggil alatan untuk membantu manusia menyelesaikan tugas. Walau bagaimanapun, ini juga membawa beberapa cabaran Sebagai contoh, keupayaan model asas menentukan kecekapan alat panggilan Ejen, tetapi model asas itu sendiri mempunyai masalah seperti ilusi model besar
.
Artikel ini mengambil senario "memasukkan arahan untuk melaksanakan pemisahan tugas dan pemanggilan fungsi secara automatik" sebagai contoh untuk membina proses Ejen asas dan memberi tumpuan kepada menerangkan cara menggunakan "Pemilihan Model Asas" dan "Prompt# 🎜🎜#Design" Tunggu sehingga modul "Task Splitting" dan "Function Calling" berjaya dibina.
Kandungan yang ditulis semula ialah: Alamat:
#🎜 #https://sota.jiqizhixin.com/project/smart_agent
GitHub Repo: #🎜# #🎜##🎜 🎜🎜#
Kandungan yang perlu ditulis semula ialah: https://github.com/zzlgreat/smart_agent#🎜 # Pembahagian tugas & panggilan fungsi Proses ejen
Untuk pelaksanaan "memasukkan perintah untuk melaksanakan pemisahan tugas dan panggilan fungsi secara automatik", proses Ejen dibina oleh projek Seperti berikut:
planner:
Split tasks berdasarkan #Split tasks dimasukkan oleh pengguna. Tentukan kit alat senarai alat yang anda ada, dan beritahu perancang, model besar yang membahagikan tugas, alat yang anda ada dan tugasan yang perlu anda selesaikan Perancang membahagikan tugas kepada pelan 1, 2, 3...#🎜🎜. ##🎜🎜 #bertanggungjawab untuk memilih alatan yang sesuai untuk rancangan pelaksanaan toolkit. Model panggilan fungsi memerlukan pemilihan alat yang sepadan mengikut pelan yang berbeza.
Dalam modul "Task Splitting", model besar perlu boleh dinyahkomikan tugasan kompleks kepada tugasan mudah keupayaan tugas. Kejayaan "pembahagian tugas" terutamanya bergantung kepada dua faktor:
Pemilihan model asas: #🎜 🎜 Untuk membahagikan tugas yang rumit, model asas yang dipilih untuk penalaan halus perlu mempunyai kebolehan pemahaman dan generalisasi yang baik, iaitu, pembahagian tugas yang tidak dilihat dalam set latihan mengikut arahan segera. Pada masa ini, lebih mudah untuk melakukan ini dengan memilih model besar dengan parameter tinggi.
Selain itu, dari segi penggunaan kuasa pengkomputeran, penalaan halus dan inferens model bahasa besar di bawah keadaan kuasa pengkomputeran rendah dicapai melalui penalaan halus lora/qlora, dan penggunaan kuantitatif diguna pakai untuk menurunkan lagi ambang untuk inferens.
Untuk memilih model "pemecahan tugas", kami berharap model tersebut mempunyai keupayaan generalisasi yang kukuh dan keupayaan rantai pemikiran tertentu. Dalam hal ini, kami boleh merujuk kepada pemeringkatan LLM Terbuka di HuggingFace untuk memilih model Kami lebih mengambil berat tentang ujian MMLU dan Purata skor komprehensif yang mengukur ketepatan pelbagai tugas model teks
. Perlu ditulis semula Kandungannya ialah: Rajah 2 Huggingface Terbuka LLM Kedudukan (0921)
Tugas model pemisahan tugas yang dipilih untuk projek ini adalah:
Untuk memilih model "panggilan fungsi", data latihan asal versi Llama2 sumber terbuka meta model pengaturcaraan CodeLlama mengandungi sejumlah besar data kod, jadi anda boleh cuba menggunakan qlora untuk skrip tersuai halus- penalaan. Untuk model panggilan fungsi, pilih model CodeLlama (34b/13b/7b boleh diterima) sebagai penanda aras
Projek ini memilih model model panggilan fungsi:
🎜Untuk memperhalusi model "panggilan fungsi", projek ini menggunakan kaedah latihan topeng kehilangan segera untuk menstabilkan output model. Berikut ialah cara fungsi kehilangan dilaraskan: 🎜🎜
For the following tasks, make plans that can solve the problem step-by-step. For each plan, indicate which external tool together with tool input to retrieve evidence. You can store the evidence into a variable #E that can be called by later tools. (Plan, #E1, Plan, #E2, Plan, ...) Tools can be one of the following: Wikipedia[input]: Worker that search for similar page contents from Wikipedia. Useful when you need to get holistic knowledge about people, places, companies, historical events, or other subjects.The response are long and might contain some irrelevant information. Input should be a search query. LLM[input]: A pretrained LLM like yourself. Useful when you need to act with general world knowledge and common sense. Prioritize it when you are confident in solving the problem yourself. Input can be any instruction.
Penyediaan Set Data Arahan
3.1 Sumber Data#🎜🎜🎜🎜🎜🎜🎜🎜🎜 #Model misi pembongkaran: Marcoroni-70B menggunakan templat segera alpaca. Model ini diperhalusi dengan arahan pada Llama2 70B Untuk menyelaraskan dengan templat model asal, set data dalam format alpaka diperlukan. Format set data perancang rewoo digunakan di sini, tetapi dalam set data asal hanya terdapat pilihan untuk memanggil wiki dan wikinya sendiri, jadi anda boleh menggunakan templat ini dan menggunakan antara muka gpt4 untuk mencipta set data gaya ini.
### Instruction:<prompt> (without the )### Response:如:### Instruction:For the following tasks, make plans that can solve the problem step-by-step. For each plan, indicate which external tool together with tool input to retrieve evidence. You can store the evidence into a variable #E that can be called by later tools. (Plan, #E1, Plan, #E2, Plan, ...) Tools can be one of the following:get_current_time[input]: Get the current time for now. search_bing[input]: Search the web for content on Bing, and return the top 10 results. Remember, the results may not as good as Wikipedia. If you think the result will not exist in wikipedia, use it. search_wiki[input]: Search the web for content on Wikipedia, and return the top 3 results. If you think the result can exist in wikipedia, use it. search_bilibili[input]: Search for videos on Bilibili, which is a website full of ACG. It can return top 10 search results. save_file[input]: save a file in the target dir which contains the data. query_mysql[input]: Execute the sql in the local mysql database. And return the result. What movies did the director of 'Oppenheim' direct? List the top 10 best.### Response:Step 1: Identify the director of "Oppenheimer" movie.#E1 = search_wiki("Director of Oppenheimer")Step 2: Retrieve information about the director's other works.If the retrieved name exists in Wikipedia, proceed with searching their filmography using search_wiki. Otherwise, try searching through Bing or another source like IMDb.For example, if Christopher Nolan is found as the director of "Oppenheimer":#E2 = search_bing("Filmography of Christopher Nolan")Step 3: Extract the list of films directed by this person from the retrieved information.From the returned results, extract the titles of the top 10 best movies according to critics/audience ratings or personal preference.</prompt>
在Ubuntu 22.04系统上,使用了CUDA 11.8和Pytorch 2.0.1,并采用了LLaMA-Efficient-Tuning框架。此外,还使用了Deepspeed 0.10.4
需要进行针对 Marcoroni-70B 的 lora 微调
全部选择完成后,新建一个训练的 bash 脚本,内容如下:
accelerate launch src/train_bash.py \--stage sft \--model_name_or_path your_model_path \--do_train \--dataset rewoo \--template alpaca \--finetuning_type lora \--lora_target q_proj,v_proj \--output_dir your_output_path \--overwrite_cache \--per_device_train_batch_size 1 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 5e-6 \--num_train_epochs 4.0 \--plot_loss \--flash_attn \--bf16
这样的设置需要的内存峰值最高可以到 240G,但还是保证了 6 卡 4090 可以进行训练。开始的时候可能会比较久,这是因为 deepspeed 需要对模型进行 init。之后训练就开始了。
需要重新写的内容是:图4 6 卡 4090 训练带宽速度
共计用时 8:56 小时。本次训练中因为主板上的 NVME 插槽会和 OCULINK 共享一路 PCIE4.0 x16 带宽。所以 6 张中的其中两张跑在了 pcie4.0 X4 上,从上图就可以看出 RX 和 TX 都只是 PCIE4.0 X4 的带宽速度。这也成为了本次训练中最大的通讯瓶颈。如果全部的卡都跑在 pcie 4.0 x16 上,速度应该是比现在快不少的。
需要进行改写的内容是:图5展示了LLaMA-Efficient-Tuning生成的损失曲线
以上是 LLaMA-Efficient-Tuning 自动生成的 loss 曲线,可以看到 4 个 epoch 后收敛效果还是不错的。
2)针对 codellama 的 qlora 微调
根据前文所述的 prompt loss mask 方法,我们对 trainer 类进行了重构(请参考项目代码仓库中的 func_caller_train.py)。由于数据集本身较小(共55行),所以仅需两分钟即可完成4个epoch的训练,模型迅速收敛
在项目代码仓库中,提供了一个简短可用的 toolkit 示例。里面的函数包括:
现在有一个70B和一个34B的模型,在实际使用中,用6张4090同时以bf16精度运行这两个模型是不现实的。但是可以通过量化的方法压缩模型大小,同时提升模型推理速度。这里采用高性能LLM推理库exllamav2运用flash_attention特性来对模型进行量化并推理。在项目页面中作者介绍了一种独特的量化方式,本文不做赘述。按照其中的转换机制可以将70B的模型按照2.5-bit量化为22G的大小,这样一张显卡就可以轻松加载
需要重新编写的内容是:1)测试方法
Diberi penerangan tugas yang kompleks yang tiada dalam set latihan, tambahkan fungsi dan penerangan yang sepadan yang tidak termasuk dalam set latihan pada kit alat. Jika perancang boleh menyelesaikan pembahagian tugas, pengedar boleh memanggil fungsi, dan penyelesai boleh meringkaskan keputusan berdasarkan keseluruhan proses.
Kandungan yang perlu ditulis semula ialah: 2) Keputusan ujian
Pembahagian tugas: Mula-mula gunakan text-generation-webui untuk menguji dengan cepat kesan model pemisahan tugas, seperti yang ditunjukkan dalam rajah berikut :
Rajah 6 Keputusan ujian pembahagian tugas
Di sini anda boleh menulis antara muka restful_api yang mudah untuk memudahkan panggilan dalam persekitaran ujian ejen (lihat kod projek fllama_api.py).
Panggilan fungsi: Logik perancang-pengedar-pekerja-penyelesai mudah telah ditulis dalam projek. Seterusnya mari kita uji tugasan ini. Masukkan arahan: apakah filem yang diarahkan oleh pengarah 'Killers of the Flower Moon'? Senaraikan salah satu daripadanya dan cari dalam bilibili.
「Search bilibili」Fungsi ini tidak termasuk dalam set latihan panggilan fungsi projek. Pada masa yang sama, filem ini juga merupakan filem baru yang masih belum dikeluarkan. Anda boleh melihat bahawa model membahagikan arahan input dengan baik:
pada bilibili dan memanggil fungsi pada masa yang sama mendapat keputusan berikut: Hasil yang diklik ialah Goodfellas, yang sepadan dengan pengarah filem itu.
Projek ini mengambil senario "memasukkan arahan untuk melaksanakan secara automatik pemisahan tugas yang kompleks dan panggilan fungsi" sebagai contoh, dan mereka bentuk proses ejen asas: toolkit-plan-distribute-worker-solver kepada melaksanakan Agen yang boleh melaksanakan tugas kompleks asas yang tidak dapat diselesaikan dalam satu langkah. Melalui pemilihan model asas dan penalaan halus lora, penalaan halus dan inferens model besar boleh diselesaikan di bawah keadaan kuasa pengkomputeran yang rendah. Dan mengguna pakai kaedah penggunaan kuantitatif untuk merendahkan lagi ambang penaakulan. Akhir sekali, contoh mencari kerja lain pengarah filem telah dilaksanakan melalui saluran paip ini, dan tugasan kompleks asas telah diselesaikan.
Had: Artikel ini hanya mereka bentuk panggilan fungsi dan pemisahan tugas berdasarkan kit alat untuk carian dan operasi asas. Set alat yang digunakan adalah sangat mudah dan tidak mempunyai banyak reka bentuk. Tidak banyak pertimbangan untuk mekanisme toleransi kesalahan. Melalui projek ini, semua orang boleh terus meneroka aplikasi dalam bidang RPA, menambah baik lagi proses ejen, dan mencapai tahap automasi pintar yang lebih tinggi untuk meningkatkan kebolehurusan proses.
Atas ialah kandungan terperinci Bagaimanakah Agen AI dilaksanakan? 6 foto 4090 sihir diubah suai Llama2: membahagikan tugas dan memanggil fungsi dengan satu arahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!