前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Chat with RTX:定制聊天机器人体验!一键安装+离线模式设置,畅聊不停歇!

Chat with RTX:定制聊天机器人体验!一键安装+离线模式设置,畅聊不停歇!

作者头像
不可言诉的深渊
发布2024-02-26 13:54:27
1.5K0
发布2024-02-26 13:54:27
举报
文章被收录于专栏:Python机器学习算法说书人

在基于 NVIDIA GPU 的强大云端服务器支持下,聊天机器人已经深入到全球数百万人的日常生活中。这些开创性的工具不仅提供了便利的沟通方式,还大大提升了信息获取和处理的效率。而现在,这些先进的 AI 技术将进一步拓展其应用场景,搭载在 NVIDIA RTX 的 Windows PC 上。这不仅实现了本地化的 AI 运算,还为用户带来了更快速、更个性化的生成式 AI 服务。无论是商务沟通、学习辅助还是娱乐互动,搭载 NVIDIA RTX 的 Windows PC 都将为用户提供更高效、更精准的 AI 支持。

Chat with RTX:开启高效 AI 工作与学习新篇章

借助 Chat with RTX,您可以轻松将生成式 AI 功能引入由 GeForce 赋能的本地 Windows PC。通过 NVIDIA TensorRT-LLM 软件和 NVIDIA RTX 加速技术,您可以将 Mistral 或 Llama 2 等开源大型语言模型连接到桌面端资料上,实现快速的数据集建立。这一创新技术将为您带来前所未有的 AI 体验,让您轻松开启自然语言处理、文本生成等领域的新篇章。

用户只需在 Chat with RTX 工具中输入查询内容,无需在笔记或存储的内容中搜寻,轻松获得精准答案。例如,当用户询问合作伙伴推荐的拉斯维加斯的餐厅时,Chat with RTX 会迅速扫描用户指定的桌面端资料,并根据上下文提供准确的答案。这种高效、便捷的信息检索方式,让用户能够更专注于工作或学习,提高效率。

Chat with RTX 工具支持多种文件格式,包括 .txt、.pdf、.doc/.docx 和 .xml,极大地提高了文件处理的便利性。只需将应用程序指向含有这些资料的文件夹,Chat with RTX 工具便能在几秒钟内迅速将文件载入到资料库中,极大地提高了工作效率。无论是需要处理大量的文档工作,还是需要整理各种格式的资料,Chat with RTX 工具都能为您提供强大的支持,让您更加专注于工作,减少繁琐的文件处理过程。

用户现在还可以轻松地将 YouTube 视频和播放列表信息整合到Chat with RTX 中。只需在聊天中加入视频网址,这些丰富的多媒体内容便能与聊天机器人进行无缝整合。用户可根据心仪的旅游 KOL 发布的视频内容,向 Chat with RTX 查询相关的旅游建议和攻略。或者,参照顶尖教育资源获取快速教学和操作方法,通过 Chat with RTX 进行上下文查询,从而更深入地理解和学习知识。这种便捷的整合方式为用户提供了更为丰富和个性化的学习体验,让他们在享受娱乐的同时,也能不断提升自我,拓宽知识视野。

Chat with RTX 为您带来高效的本地部署解决方案,让您在 Windows RTX PC 和工作站上轻松运行。这款强大的工具能够让您将用户数据保存在本地设备上,从而快速提供查询结果。与依赖云端环境的 LLM 服务不同,Chat with RTX 让您在 PC 桌面端处理敏感资料,无需分享给第三方或连接网络,保障数据的安全性。在速度与安全性之间取得完美的平衡,让您轻松享受卓越的体验。

Chat with RTX 技术演示版下载指南

Chat with RTX 技术演示版现已开放免费下载,让用户轻松打造个人专属聊天机器人。这款软件可在搭载 NVIDIA GeForce RTX 30 系列或更高版本的 GPU(至少 8GB 显存)的设备上进行本地部署,让用户畅享流畅、高效的聊天体验。通过这款软件,用户可以轻松地定制机器人的语言模型,使其更加符合自己的需求和风格。同时,Chat with RTX 技术演示版还支持多种自然语言处理任务,如语音识别、文本生成等,为用户提供更加智能、便捷的聊天机器人解决方案。快来下载体验吧!使用 Chat with RTX 构建定制 LLM | NVIDIA https://www.nvidia.cn/ai-on-rtx/chat-with-rtx-generative-ai/

除了对硬件配置的高要求,使用 Chat with RTX 还需要满足一些其他的系统要求。首先,您需要配备 GeForce RTX 30 系列或更高版本的 GPU,以确保最佳的性能和兼容性。其次,为了获得最佳的体验,您的 GPU 显存至少需要达到 8GB。此外,为了能够充分利用 Chat with RTX 的各项功能,您还需要安装 Windows 10 或 11 操作系统。最后,请确保您的 NVIDIA GPU 驱动是最新的版本,以确保与 Chat with RTX 的完全兼容性。只有满足了这些要求,您才能享受到 Chat with RTX 带来的卓越体验。

Chat with RTX 技术演示版安装指南

Chat with RTX 技术演示版下载完成后,我们就可以开始进行安装了。在安装的第一步,我们需要对下载下来的压缩文件进行解压。解压完成后,你会看到一个文件夹,其中包含了安装所需的全部文件。接下来,我们就可以开始进行安装了。

然后双击 setup.exe 运行安装程序对 Chat with RTX 技术演示版进行安装,这是使用该技术的第一步。安装程序将会自动检测你的电脑环境并进行安装,只需要按照提示进行操作即可。在安装过程中,确保你的电脑处于联网状态,以便安装程序能够下载最新的更新和补丁。一旦安装完成,你就可以开始使用 Chat with RTX 技术演示版了。

接着点击 AGREE AND CONTINUE,出现了一个新的界面。这个界面简洁明了,让人一目了然。

我们可以选择在 Component 下方的选项中全部勾选上。然而,在进行安装和配置的过程中,我们不建议勾选 Perform a clean installation 选项,因为这可能会导致原有的数据和设置被清空,给用户带来不必要的麻烦。接下来,只需轻点“NEXT”,您便正式进入了安装环节。在联网环境下,挂载好 socks5 代理,接下来的任务就是耐心等待 Chat with RTX 技术演示版的安装完成。整个过程无需复杂的设置,也无需专业技能,一切都是如此的简单明了。用户在选择不同的安装目录时,会导致安装失败的问题。为了确保您的正常使用,建议您在安装时使用默认的安装目录,以避免不必要的困扰。

Chat with RTX 技术演示版启动指南

安装完成 Chat with RTX 技术演示版后,我们会在桌面上看到一个醒目的 NVIDIA Chat with RTX 图标。这个图标犹如一扇通往奇妙聊天世界的大门,只需轻轻双击,便可启动这个神奇的程序。但是,在你开启这段奇妙的旅程之前,有几个注意事项需要牢记。首先,确保你的网络连接稳定且已联网。因为初次运行时,程序可能需要下载一些必要的组件。为了避免下载过程中出现任何问题,建议你提前设置好 socks5 代理。完成这些准备工作后,Chat with RTX 会自动为你弹出一个浏览器网页,这个网页就是你的聊天界面。简洁明了,操作便捷,你将会在这里与世界各地的用户进行实时交流。但请注意,在弹出浏览器网页之前,它会先弹出一个 CMD 命令行窗口。即使你已经进入到了浏览器网页,这个 CMD 命令行窗口也千万不可以关闭。它是程序正常运行的重要保证,一旦关闭可能会影响你的聊天体验。所以,请务必保持这个窗口开启,让它安静地运行在后台,确保你的 Chat with RTX 技术演示版能够顺畅地为你服务。

关闭 Chat with RTX 的步骤相当直接,首先你需要点击右上角的关闭图标。接着,你需要关闭你的浏览器。最后,你需要返回到你之前打开的命令行窗口 CMD,然后按下回车键关闭它。这些步骤完成后,Chat with RTX 将会完全关闭,释放相关的系统资源。记住,正确地关闭程序是维护电脑稳定运行的重要一环,不要忽视这一简单的日常任务。

Chat with RTX 技术演示版离线模式设置指南

既然 Chat with RTX 允许离线模式运行,我们决定进行一次实验来验证这一功能。我们首先关闭了之前联网运行的 Chat with RTX 。随后,为了确保实验的准确性,我们特意断开电脑的网络连接,准备重新运行 Chat with RTX 以检查其是否能在离线模式下正常运行。然而,出乎我们的预料,尝试离线运行后,屏幕上出现了如图所示的报错信息。这让我们不禁对 Chat with RTX 的离线功能产生了疑问。

我们首先定位到 app.py 的 114 行,如图所示。

然后找到 HuggingFaceEmbeddings 外加上 embedded_model 两个变量的定义,如图所示。

接着找到 app_config 变量的定义,如图所示。

然后通过相对路径找到 app_config.json 配置文件,打开后如图所示。

显然,变量 embedded_model 对应的值就是字符串 WhereIsAI/UAE-Large-V1。到目前为止,还差 HuggingFaceEmbeddings 这个变量,我们到目前为止只知道它是位于 langchain 包中的,短时间内暂时还不清楚变量 HuggingFaceEmbeddings 是什么,根据报错指定的文件绝对路径外加上导入的代码就可以轻而易举的找到 HuggingFaceEmbeddings 的定义,如下所示。

代码语言:javascript
复制
class HuggingFaceEmbeddings(BaseModel, Embeddings):
    """HuggingFace sentence_transformers embedding models.

    To use, you should have the ``sentence_transformers`` python package installed.

    Example:
        .. code-block:: python

            from langchain.embeddings import HuggingFaceEmbeddings

            model_name = "sentence-transformers/all-mpnet-base-v2"
            model_kwargs = {'device': 'cpu'}
            encode_kwargs = {'normalize_embeddings': False}
            hf = HuggingFaceEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )
    """

    client: Any  #: :meta private:
    model_name: str = DEFAULT_MODEL_NAME
    """Model name to use."""
    cache_folder: Optional[str] = None
    """Path to store models. 
    Can be also set by SENTENCE_TRANSFORMERS_HOME environment variable."""
    model_kwargs: Dict[str, Any] = Field(default_factory=dict)
    """Keyword arguments to pass to the model."""
    encode_kwargs: Dict[str, Any] = Field(default_factory=dict)
    """Keyword arguments to pass when calling the `encode` method of the model."""
    multi_process: bool = False
    """Run encode() on multiple GPUs."""

    def __init__(self, **kwargs: Any):
        """Initialize the sentence_transformer."""
        super().__init__(**kwargs)
        try:
            import sentence_transformers

        except ImportError as exc:
            raise ImportError(
                "Could not import sentence_transformers python package. "
                "Please install it with `pip install sentence-transformers`."
            ) from exc

        self.client = sentence_transformers.SentenceTransformer(
            self.model_name, cache_folder=self.cache_folder, **self.model_kwargs
        )

然后进入包 sentence_transformers 中查找 SentenceTransformer 的定义,如下所示。

代码语言:javascript
复制
class SentenceTransformer(nn.Sequential):
    """
    Loads or create a SentenceTransformer model, that can be used to map sentences / text to embeddings.

    :param model_name_or_path: If it is a filepath on disc, it loads the model from that path. If it is not a path, it first tries to download a pre-trained SentenceTransformer model. If that fails, tries to construct a model from Huggingface models repository with that name.
    :param modules: This parameter can be used to create custom SentenceTransformer models from scratch.
    :param device: Device (like 'cuda' / 'cpu') that should be used for computation. If None, checks if a GPU can be used.
    :param cache_folder: Path to store models
    :param use_auth_token: HuggingFace authentication token to download private models.
    """
    def __init__(self, model_name_or_path: Optional[str] = None,
                 modules: Optional[Iterable[nn.Module]] = None,
                 device: Optional[str] = None,
                 cache_folder: Optional[str] = None,
                 use_auth_token: Union[bool, str, None] = None
                 ):
        self._model_card_vars = {}
        self._model_card_text = None
        self._model_config = {}

        if cache_folder is None:
            cache_folder = os.getenv('SENTENCE_TRANSFORMERS_HOME')
            if cache_folder is None:
                try:
                    from torch.hub import _get_torch_home

                    torch_cache_home = _get_torch_home()
                except ImportError:
                    torch_cache_home = os.path.expanduser(os.getenv('TORCH_HOME', os.path.join(os.getenv('XDG_CACHE_HOME', '~/.cache'), 'torch')))

                cache_folder = os.path.join(torch_cache_home, 'sentence_transformers')

        if model_name_or_path is not None and model_name_or_path != "":
            logger.info("Load pretrained SentenceTransformer: {}".format(model_name_or_path))

            #Old models that don't belong to any organization
            basic_transformer_models = ['albert-base-v1', 'albert-base-v2', 'albert-large-v1', 'albert-large-v2', 'albert-xlarge-v1', 'albert-xlarge-v2', 'albert-xxlarge-v1', 'albert-xxlarge-v2', 'bert-base-cased-finetuned-mrpc', 'bert-base-cased', 'bert-base-chinese', 'bert-base-german-cased', 'bert-base-german-dbmdz-cased', 'bert-base-german-dbmdz-uncased', 'bert-base-multilingual-cased', 'bert-base-multilingual-uncased', 'bert-base-uncased', 'bert-large-cased-whole-word-masking-finetuned-squad', 'bert-large-cased-whole-word-masking', 'bert-large-cased', 'bert-large-uncased-whole-word-masking-finetuned-squad', 'bert-large-uncased-whole-word-masking', 'bert-large-uncased', 'camembert-base', 'ctrl', 'distilbert-base-cased-distilled-squad', 'distilbert-base-cased', 'distilbert-base-german-cased', 'distilbert-base-multilingual-cased', 'distilbert-base-uncased-distilled-squad', 'distilbert-base-uncased-finetuned-sst-2-english', 'distilbert-base-uncased', 'distilgpt2', 'distilroberta-base', 'gpt2-large', 'gpt2-medium', 'gpt2-xl', 'gpt2', 'openai-gpt', 'roberta-base-openai-detector', 'roberta-base', 'roberta-large-mnli', 'roberta-large-openai-detector', 'roberta-large', 't5-11b', 't5-3b', 't5-base', 't5-large', 't5-small', 'transfo-xl-wt103', 'xlm-clm-ende-1024', 'xlm-clm-enfr-1024', 'xlm-mlm-100-1280', 'xlm-mlm-17-1280', 'xlm-mlm-en-2048', 'xlm-mlm-ende-1024', 'xlm-mlm-enfr-1024', 'xlm-mlm-enro-1024', 'xlm-mlm-tlm-xnli15-1024', 'xlm-mlm-xnli15-1024', 'xlm-roberta-base', 'xlm-roberta-large-finetuned-conll02-dutch', 'xlm-roberta-large-finetuned-conll02-spanish', 'xlm-roberta-large-finetuned-conll03-english', 'xlm-roberta-large-finetuned-conll03-german', 'xlm-roberta-large', 'xlnet-base-cased', 'xlnet-large-cased']

            if os.path.exists(model_name_or_path):
                #Load from path
                model_path = model_name_or_path
            else:
                #Not a path, load from hub
                if '\\' in model_name_or_path or model_name_or_path.count('/') > 1:
                    raise ValueError("Path {} not found".format(model_name_or_path))

                if '/' not in model_name_or_path and model_name_or_path.lower() not in basic_transformer_models:
                    # A model from sentence-transformers
                    model_name_or_path = __MODEL_HUB_ORGANIZATION__ + "/" + model_name_or_path

                model_path = os.path.join(cache_folder, model_name_or_path.replace("/", "_"))
                
                if not os.path.exists(os.path.join(model_path, 'modules.json')):
                    # Download from hub with caching
                    snapshot_download(model_name_or_path,
                                        cache_dir=cache_folder,
                                        library_name='sentence-transformers',
                                        library_version=__version__,
                                        ignore_files=['flax_model.msgpack', 'rust_model.ot', 'tf_model.h5'],
                                        use_auth_token=use_auth_token)

            if os.path.exists(os.path.join(model_path, 'modules.json')):    #Load as SentenceTransformer model
                modules = self._load_sbert_model(model_path)
            else:   #Load with AutoModel
                modules = self._load_auto_model(model_path)

        if modules is not None and not isinstance(modules, OrderedDict):
            modules = OrderedDict([(str(idx), module) for idx, module in enumerate(modules)])

        super().__init__(modules)
        if device is None:
            device = "cuda" if torch.cuda.is_available() else "cpu"
            logger.info("Use pytorch device: {}".format(device))

        self._target_device = torch.device(device)

追溯一下变量,显然可以发现当程序开始执行 SentenceTransformer 类的初始化方法的时候,该方法的第 1 个参数 model_name_or_path 对应的值就是字符串 WhereIsAI/UAE-Large-V1。因此,(if model_name_or_path is not None and model_name_or_path != ""),这样一条 if 语句下面的内容应该被执行,下面的内容又有 2 个分支,我们目前猜测它目前肯定执行的是 else 分支,具体是不是这样只需要查找一下字符串 WhereIsAI/UAE-Large-V1 对应的目录是不是存在,经过一番查找后会发现它确实不存在。那么我们只需要先找到首次启动下载的模型在哪里,然后复制路径,把路径内容丢给 app_config.json 配置文件中 embedded_model 的变量值或者把路径内容丢给 app.py 中 embedded_model 的变量值就行了。最后,我们只差找到首次启动下载的模型在哪里了,我们先在联网外加上挂载好 socks5 代理的条件下再次重新启动 Chat with RTX,会发现命令窗口如图所示。

然后找一下选中内容对应的路径是否存在,经过一番查找之后会发现这个路径确实存在,然后把该路径对应的字符串表示直接复制到 app_config.json 配置文件中 embedded_model 的变量值或者 app.py 中 embedded_model 的变量值。复制完成之后对修改的文件进行保存,接着断开网络连接后重新启动 Chat with RTX,发现已经可以完美以离线模式运行 Chat with RTX。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档