前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >在Jetson上玩转大模型Day12:NanoLLM開發平臺(1):Python API接口說明

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

原创
作者头像
GPUS Lady
发布2024-11-18 16:59:47
发布2024-11-18 16:59:47
920
举报
文章被收录于专栏:AIOTAIOT

我們在前面所介紹的各項應用,包括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 NanoLLM

model = 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開發環境,並且演示一些比較實用的交互式範例,讓大家更容易上手。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档