ROS2 部署大语言模型节点

4GB GPU的DeepSeek-Coder 1.3B模型,并且它已经被量化或优化过。以下是具体的步骤:

安装必要的依赖项:

复制代码
pip install transformers torch grpcio googleapis-common-protos

创建一个新的ROS 2包:

复制代码
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python llm_ros2_node --dependencies rclpy std_msgs grpcio googleapis-common-protos torch transformers

编辑setup.py文件以包含所需的依赖项:

复制代码
from setuptools import setup

package_name = 'llm_ros2_node'

setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    data_files=[
        ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='your_name',
    maintainer_email='[email protected]',
    description='TODO: Package description',
    license='Apache License 2.0',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'llm_node = llm_ros2_node.llm_node:main',
        ],
    },
)

编写ROS 2节点代码:在这个节点中,我们将订阅一个话题并发送消息到本地的大语言模型,然后将结果发布到另一个话题。

复制代码
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

class LLMNode(Node):
    def __init__(self):
        super().__init__('llm_node')
        self.subscription = self.create_subscription(
            String,
            'input_text',
            self.listener_callback,
            10)
        self.publisher_ = self.create_publisher(String, 'output_text', 10)

        # Load the DeepSeek-Coder model and tokenizer
        self.model_name_or_path = "path/to/deepseek-coder-1.3b-optimized"
        self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        self.tokenizer = AutoTokenizer.from_pretrained(self.model_name_or_path)
        self.model = AutoModelForCausalLM.from_pretrained(self.model_name_or_path).to(self.device)
        self.model.eval()

    def listener_callback(self, msg):
        self.get_logger().info(f'Received input text: {msg.data}')
        response = self.call_llm(msg.data)
        self.publisher_.publish(String(data=response))

    def call_llm(self, prompt):
        inputs = self.tokenizer.encode(prompt, return_tensors="pt").to(self.device)
        outputs = self.model.generate(inputs, max_length=50, num_return_sequences=1)
        reply = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
        return reply

def main(args=None):
    rclpy.init(args=args)
    llm_node = LLMNode()
    rclpy.spin(llm_node)
    llm_node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()
相关推荐
Code_流苏4 分钟前
《Python星球日记》 第69天:生成式模型(GPT 系列)
python·gpt·深度学习·机器学习·自然语言处理·transformer·生成式模型
新知图书8 分钟前
DeepSeek基于注意力模型的可控图像生成
人工智能·深度学习·计算机视觉
白熊18822 分钟前
【计算机视觉】OpenCV实战项目: Fire-Smoke-Dataset:基于OpenCV的早期火灾检测项目深度解析
人工智能·opencv·计算机视觉
↣life♚30 分钟前
从SAM看交互式分割与可提示分割的区别与联系:Interactive Segmentation & Promptable Segmentation
人工智能·深度学习·算法·sam·分割·交互式分割
zqh1767364646936 分钟前
2025年阿里云ACP人工智能高级工程师认证模拟试题(附答案解析)
人工智能·算法·阿里云·人工智能工程师·阿里云acp·阿里云认证·acp人工智能
程序员小杰@1 小时前
【MCP教程系列】SpringBoot 搭建基于 Spring AI 的 SSE 模式 MCP 服务
人工智能·spring boot·spring
于壮士hoho1 小时前
Python | Dashboard制作
开发语言·python
上海锝秉工控1 小时前
智能视觉检测技术:制造业质量管控的“隐形守护者”
人工智能·计算机视觉·视觉检测
绿算技术1 小时前
“强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
大数据·人工智能·智能家居
TGITCIC1 小时前
为何大模型都使用decoder-only?
人工智能·大模型·transformer·ai agent·大模型面试·ai面试