在Jetson上玩转大模型Day12:NanoLLM開發平臺(1):Python API接口說明

科技   2024-11-18 17:55   江苏  











 在Jetson上玩转大模型:写在前面

在Jetson上玩转大模型Day2:环境搭建

在Jetson上玩转大模型Day3:TGW智能助手

在Jetson上玩转大模型Day4:SDW文生图

在Jetson上玩转大模型Day5:Ollama指令模式的智能助手

在Jetson上玩转大模型Day6:Ollama的Webui智能助手

在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot

在Jetson上玩转大模型Day8:多模態搜圖的NanoDB

在Jetson上玩转大模型Day9:建立EffectiveViT测试环境

在Jetson上玩转大模型Day10:OWL-ViT应用

在Jetson上玩转大模型Day11:SAM2应用


我們在前面所介紹的各項應用,包括SAM、OWL-Vit、Text-Generation-Webui、stable-diffusion-webui等等,都是基於個別項目環境去搭建,目的是讓讀者比較輕鬆地掌握不同技能的知識。但是這種方式對於要開發一個實用的應用系統來說,就顯得過於零碎,並且難以整合,這又不符合我們一開始所設定的目標,因此提供一套更有系統的開發環境,就變得非常重要。

在Jetson AI Lab項目中的Nano_LLM項目,就爲我們提供很完整的開發環境,項目作者爲我們提供非常豐富的Python API,這樣讓我們就能很有彈性地去建構實用的AI應用,例如結合語音、對話、圖像、視頻等多模態的應用,甚至是結合多智能體(agents)形成完整工作流的智能應用等等。

這些Python API開發接口主要有如下所列的七大類:

Models(模型相關):提供模型加载、量化、嵌入和推理相關的接口。

-支持的API類型:MLC(Machine Learning Compilation)、HF(HuggingFace)與AWQ(Activation-aware Weight QuantizationMLC)三種。

-支持的架構:Llama、Llava、StableLM、Phi-2、Gemma、Mistral、GPT-Neox

  • 已測試的模型:

  • 大模型(LLM):

    • meta-llama/Meta-Llama-3-8B、

    • meta-llama/Llama-2-7b-chat-hf、

    • meta-llama/Llama-2-13b-chat-hf、

    • meta-llama/Llama-2-70b-chat-hf

  • 小模型(SLM):

    • stabilityai/stablelm-2-zephyr-1_6b、

    • stabilityai/stablelm-zephyr-3b、

    • NousResearch/Nous-Capybara-3B-V1.9、

    • TinyLlama/TinyLlama-1.1B-Chat-v1.0、

    • princeton-nlp/Sheared-LLaMA-2.7B-ShareGPT、

    • google/gemma-2b-it、microsoft/phi-2

  • 視覺大模型(VLM)

    • liuhaotian/llava-v1.5-7b

    • liuhaotian/llava-v1.5-13b

    • liuhaotian/llava-v1.6-vicuna-7b

    • liuhaotian/llava-v1.6-vicuna-13b

    • NousResearch/Obsidian-3B-V0.5

    • Efficient-Large-Model/VILA-2.7b

    • Efficient-Large-Model/VILA-7b

    • Efficient-Large-Model/VILA-13b

    • Efficient-Large-Model/VILA1.5-3b

    • Efficient-Large-Model/Llama-3-VILA1.5-8B

    • Efficient-Large-Model/VILA1.5-13b

    模型相關操作的API:目前已經提供14種以“NanoLLM.”帶頭的API接口,例如NanoLLM.from_pretrained()、NanoLLM.generate()等等。

    Streaming與KV Cache


-Chat(對話相關):关管理多回合聊天会话、模板和维护嵌入历史记录的信息,包括chatHistory、chatMessage等等。

-Multimodal(多模態):提供优化的多模式管道,包括视觉/语言模型(VLM)、矢量数据库(NanoDB)和可以集成到交互式代理中的语音服务。

-Plugins(擴充插件):插件是模型(如LLM、ASR、TTS)、后处理器和I/O(如视频和音频流)的包装器,它们可以连接在一起,与其他插件节点串联形成管道,其目的是要减少样板代码并快速构建更复杂的代理。


插件将输入接收到处理队列中,对其进行处理,然后通过其输出通道输出结果。每个输出通道表示模型具有的一种输出类型(例如,ChatQuery插件在令牌、单词和句子级别公开输出),每个输出通道可以连接到任意数量的其他插件节点。


默认情况下,插件是线程化的,并在自己的队列中运行,但可以通过将threaded=False传递给插件的初始化器来配置为内联(无线程)运行。它们也可以用interrupt()函数中断,以放弃当前请求和输入队列中的任何剩余数据,例如,當你想提前停止LLM生成,或静音TTS输出。

创建新插件类型时,实现process()函数来处理传入数据,然后返回传出数据。您还可以使用简单的回调函数来接收数据,而不需要定义自己的插件类(如chat_Plugin.add(my_function)来接收聊天输出)

-Agents(智能體):只是创建或连接其他嵌套插件管道的插件,用于通过更高级的控制流实现更高级的行为。它们被设计为相互叠加,这样你就可以将不同代理的功能组合在一起。目前已經提供的智能體有ChatAgent、VoiceChat、WebChat、VideoStream與VideoQuery等五大類。

-Webserver(網頁控制):这是一个使用Flask和websockets实现的可扩展Web服务器,允许代理提供前端HTML页面,以及使用websockets的双向消息传递,包括特定于每个应用程序的自定义消息类型

-Utilities(工具):系統目前提供了Tensor Conversion(張量格式轉換)、Audio(音頻處理)、Images(圖像處理)、ArgumentParsing(參數解析)等四大類实用的工具。

除了上述的Python API之外,項目還提供一些基本指令,讓我們不需要寫代碼就能直接調用指令來實現某些基本功能,例如下面指令: 

$ python3 -m nano_llm.completion --api=mlc \  --model meta-llama/Llama-3-8b-chat-hf \  --quantization q4f16_ft \  --prompt 'Once upon a time,'

與下面的 Python 代碼是等效的:

from nano_llm import NanoLLMmodel = NanoLLM.from_pretrained(   "meta-llama/Llama-3-8b-hf",     api='mlc',                      api_token=($HUGGINGFACE_TOKEN)    # 自己的HUGGINGFACE_TOKEN   quantization='q4f16_ft')response = model.generate("Once upon a time,", max_new_tokens=128)for token in response:   print(token, end='', flush=True)

後面我們就會帶着大家開始安裝Nano_LLM開發環境,並且演示一些比較實用的交互式範例,讓大家更容易上手。


GPUS开发者
在这里,你可以及时了解NVIDIA GPU的行业资讯、最新进展、应用场景和各项功能。还有一些工具、技巧和教程,帮助你利用GPU打造未来的科技。参与GPU世界举办的精彩活动,体验人工智能的未来生活。
 最新文章