Llama-Factory + Ollama 打造属于自己的中文版 Llama3

Meta 推出 Llama3 也有一小段时间了。Llama3 包含 8B 和 70B 两种参数规模,涵盖预训练和指令调优的变体。Llama 3 支持多种商业和研究用途,并已在多个行业标准测试中展示了其卓越的性能(关于Llama3的具体介绍可以参考本站另外一篇博文:尝鲜 Meta Llama 3)。和以往的原始 Llama 模型一样,Llama 3 对中文的支持效果欠佳,经常会出现你用中文提问,它用英文或中文+英文回复的现象。

例如当我问它:”你是谁?“,会得到如下的回答:

>>> 你是谁?
I am LLaMA, an AI assistant developed by Meta AI that can understand and respond to human input in a conversational manner. I'm not a human, but a computer program designed to simulate conversation and answer questions to the best of my ability based on my training data. I can generate text on a wide range of topics, from science and history to entertainment and culture.

然后让它”介绍一下上海的旅游景点“,则会得到如下的回答:

>>> 介绍一下上海的旅游景点
Shanghai, a city with a rich history and culture, has numerous tourist attractions that showcase its modernity, traditional charm, and natural beauty. Here are some of the most popular tourist spots in Shanghai:

**Landmarks:**

1. **Oriental Pearl Tower**: A iconic TV tower with panoramic views of the city.
2. **Shanghai Tower**: The second-tallest building in the world, offering stunning views from its observation deck.
3. **Jin Mao Tower**: A 421-meter-tall skyscraper and home to the luxurious Mandarin Oriental Hotel.
4. **The Bund**: A famous waterfront promenade lined with colonial-era buildings and stunning views of the Huangpu River.

**Historical Sites:**

1. **Yu Garden**: A classic Chinese garden with beautiful landscaping, pavilions, and koi ponds.
2. **Shanghai Museum**: A museum showcasing Chinese art, history, and culture.
3. **Xintiandi**: A charming neighborhood with traditional Shikumen architecture and modern boutiques.
4. **French Concession**: A historic neighborhood with colonial-era buildings, cafes, and restaurants.

**Nature Reserves:**

1. **Changfeng Park**: A large public park with gardens, lakes, and walking trails.
2. **Fuxing Island**: A tranquil oasis in the Huangpu River with beautiful landscaping and walking paths.
3. **Shanghai Botanical Garden**: A peaceful garden featuring various plant species and a peaceful atmosphere.

**Other Attractions:**

1. **Disney Resort Shanghai**: An amusement park with Disney-themed rides, shows, and attractions.
2. **Shanghai Grand Opera House**: A stunning opera house with performances ranging from music to dance.
3. **Shanghai Zoo**: A popular zoo with various animal species and a panda enclosure.
4. **The Shanghai Tower's Observation Deck**: For panoramic views of the city.

These are just a few of the many tourist attractions in Shanghai. Depending on your interests, there are plenty more hidden gems to explore! 😊

回答得还是很简洁而全面的。缺点就是全是英文答案,对于英文不太好的人有点吃力。对 Llama3 进行微调来支持中文是一项必须的工作。

Llama3 中文模型的现状

实际上,当 Llama3 推出以后,很多开发者在中文支持方面做了大量的工作,一大批微调的中文模型如雨后春笋般纷纷涌现。目前比较知名的中文模型有:

  • Unichat-llama3-Chinese(地址):中国联通AI创新中心发布业界第一个llama3中文指令微调模型,全参数微调(非lora),以Meta Llama 3为基础,增加中文数据进行训练,实现llama3模型高质量中文问答,模型上下文保持原生长度8K,支持长度64K版本将于后续发布。
  • OpenBuddy – Open Multilingual Chatbot(地址):OpenBuddy是一个面向全球用户的强大的开放式多语言聊天机器人模型,强调对话式AI以及对英语、中文和其他语言的无缝多语言支持。
  • Llama3-Chinese(地址):在500k高质量中文多轮SFT数据、100k英语多轮SFT数据和2k单轮自我认知数据上训练的大型模型,采用基于Meta的DORA和LORA+的训练方法。以Llama-3-8B为基础。
  • Llama3-8B-Chinese-Chat(地址):是一个针对中文和英文用户的指令调整语言模型,具有角色扮演和工具使用等各种能力,建立在 Meta-Llama-3-8B-Instruct 模型的基础上。
  • Llama-3-8B-Instruct-Chinese-chat(地址):使用 firefly-train-1.1M,moss-003-sft-data,school_math_0.25M,ruozhiba 等数据集微调的模型,基于Llama-3-8B-Instruct。
  • Bunny-Llama-3-8B-V(地址):Bunny 是一系列轻量但功能强大的多模式模型。它提供多种即插即用视觉编码器,如 EVA-CLIP、SigLIP 和语言主干,包括 Llama-3-8B、Phi-1.5、StableLM-2、Qwen1.5、MiniCPM 和 Phi-2。为了弥补模型大小的减小,通过从更广泛的数据源中进行精选来构建信息更丰富的训练数据。
  • llava-llama-3-8b-v1_1(地址):llava-llama-3-8b-v1_1 是一个 LLaVA 模型,由XTuner使用ShareGPT4V-PT和InternVL-SFT从meta-llama/Meta-Llama-3-8B-Instruct和CLIP-ViT-Large-patch14-336进行微调。
  • 。。。

还有很多新的模型就不一一列举了,想要尝试这些模型可以直接部署试用。本文则探讨如何使用 Llama-Factory 对 Llama3 进行中文微调的具体过程,并通过 Ollama 本地部署中文微调的 Llama3 模型,打造属于自己的个性化的 Llama3 LLM 。

使用 Llama-Factory 对 Llama3 进行中文微调

LLaMA-Factory 是一个开源项目,它提供了一套全面的工具和脚本,用于微调、服务和基准测试 LLaMA 模型。LLaMA(大型语言模型自适应)是 Meta AI 开发的一组基础语言模型,在各种自然语言任务上表现出色。

LLaMA-Factory 存储库提供以下内容,让您轻松开始使用 LLaMA 模型:

  • 数据预处理和标记化的脚本
  • 用于微调 LLaMA 模型的训练流程
  • 使用经过训练的模型生成文本的推理脚本
  • 评估模型性能的基准测试工具
  • 用于交互式测试的 Gradio Web UI

关于 Llama-Factory 的具体介绍可以参考本站的另外一篇博文:LLaMA-Factory 简介。

安装 Llama-Factory

首先从 github 拉取 Llama-Factory:

git clone https://github.com/hiyouga/LLaMA-Factory.git

为了方便今后的调试和部署,我选择了使用 docker 的方式来运行 Llama-Factory。它提供了一个参考的 Dockerfile:

FROM nvcr.io/nvidia/pytorch:24.01-py3

WORKDIR /app

COPY requirements.txt /app/
RUN pip install -r requirements.txt

COPY . /app/
RUN pip install -e .[deepspeed,metrics,bitsandbytes,qwen]

VOLUME [ "/root/.cache/huggingface/", "/app/data", "/app/output" ]
EXPOSE 7860

CMD [ "llamafactory-cli webui" ]

可以根据自己的实际情况进行修改。我家里的网络自己搭建了 proxy server(为了访问 github, huggingface 等站点),所以更改 Dockerfile 如下。该 Dockerfile 从 docker buildx 命令行获取 http_proxy 和 https_proxy 变量,并设置 docker buildx 环境里的相应环境变量,这样编译 docker 镜像的过程中就能使用代理服务器了。

FROM nvcr.io/nvidia/pytorch:24.01-py3


# 使用构建参数设置环境变量
ARG http_proxy
ARG https_proxy

# 设置环境变量
ENV HTTP_PROXY=$http_proxy
ENV HTTPS_PROXY=$https_proxy
ENV http_proxy=$http_proxy
ENV https_proxy=$https_proxy

WORKDIR /app

COPY requirements.txt /app/
RUN pip install -r requirements.txt

COPY . /app/
RUN pip install -e .[deepspeed,metrics,bitsandbytes,qwen]

# unset环境变量。Container运行过程中需要代理服务器的话通过-e 传入参数
ENV HTTP_PROXY=""
ENV HTTPS_PROXY=""
ENV http_proxy=""
ENV https_proxy=""

VOLUME [ "/root/.cache/huggingface/", "/app/data", "/app/output" ]
EXPOSE 7860

CMD [ "python", "src/train_web.py" ]

运行如下脚本生成自己的 Llama-Factory docker 镜像:

docker buildx build --build-arg http_proxy=http://proxy_ip:port --build-arg https_proxy=http://proxy_ip:port -t llama-factory:v0.00 .

Docker 镜像编译成功后,运行 docker image list 就可以看到编译出来的 docker 镜像了:

docker image list

接下来我们需要运行 Llama-Factory container。Llama-Factory 提供了一个参考的 docker-compose.yml 文件来运行 docker,我们可以按照自己的实际情况进行修改。我这边修改的版本如下,修改的部分参考注释。

version: '3.8'

services:
  llama-factory:
    #build:
    #  dockerfile: Dockerfile
    #  context: .
    image: llama-factory:v0.00 # 修改为编译出来的 docker image 名称/版本
    container_name: llama_factory # container 名称
    volumes:
      - ./volumes/huggingface:/root/.cache/huggingface/
      - ./volumes/data:/app/data
      - ./volumes/output:/app/output
      - /mnt/dev/myprojects/llm-webui-docker/models:/app/models # 映射自己的models目录
    environment:
      - CUDA_VISIBLE_DEVICES=0
      - GRADIO_SERVER_PORT=7864 # webui跑在7864端口上,7860被comfyui占用了
    ports:
      - "7864:7864" # webui跑在7864端口上,7860被comfyui占用了
    ipc: host
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            count: "all"
            capabilities: [gpu]
    restart: unless-stopped

运行如下命令启动 Llama-Factory 容器:

docker-compose up --detach

现在可以看到 llama_factory container 已经在正常运行了:

访问 http://server_ip:7864 则可以看到如下的 Llama-Factory WebUI 界面:

使用 Llama-Factory 为 Llama3 训练中文 LoRA

1. 模型名称与路径

进入 Llama-Factory WebUI 后,先选择 Model name 为 LLaMA-8B,这时候 Model path 会自动变成 meta-llama/Meta-Llama-3-8B 并自动从 huggingface 拉取 Meta-Llama-3-8B 模型。我这里因为已经下载了 Meta-Llama-3-8B 并映射到了 Llama-Factory container 的 /app/models/llama3-hf/Meta-Llama-3-8B 目录,所以我这里的 Model path 也设置为该路径。

2. 设置 Advanced configurations

点右边的箭头展开 Advance configurations。量化位数(Quantization bit)可以选择 4 ,减小模型的体积并提高速度。Prompt template 则选择 llama3。如果有安装 flashattn2 或者 unsloth 的话可以在 boost 里选择,我这里没有安装所以选择 none。

3. 设置训练参数

在 Train 标签页里设置训练相关的参数。主要的参数有:

  • Stage:设置为 Supervised Fine-Tuning
  • Data dir:我这里设置为 data ,因为 Llama-Factory 项目自身也带了一些中文数据集,我打算直接使用。如果你自己下载了别的中文数据集,请设置相应的数据集所在的目录地址
  • Dataset:我选择了 Llama-Factory 项目里自带的 alpaca_zh,alpaca_gpt4_zh 和 oaast_sft_zh 数据集
  • Learning rate:安装自己的需要设置。我采用了缺省的 5e-5
  • Epochs:按照自己的需要设置。我采用了缺省的 3.0
  • Cutoff length:按照自己的需要设置。数字越大,对 GPU 和显存的要求越高;数字越小,则可能对长句的语义理解不够充分。我这里选择缺省的 1024
  • Batch size:按照自己的需要甚至。数字越大,对 GPU 和显存的要求越高。我这里选择缺省的 2
  • Output dir / Config path:按照自己的需要设置

设置完成后,可以点击 Preview dataset 来查看一下数据集内容。

点击 Preview command 可以查看训练过程的命令行参数。如果不希望使用 WebUI 进行训练,则可以直接执行命令行,这样也有助于进一步编程和自动化:

点击 Save arguments 则将目前的训练设置保存到指定的 json 文件。点击 Load arguments 则可以加载以前保存好的训练设置。

4. 开始训练

参数设置好后,就可以点击 Start 开始训练。

Llama-Factory 训练脚本开始解析数据。

整个训练的过程预计 8 个小时不到一点。

训练完成后,在 /app/output/llama3_cn_train_2024-04-27-16-32-46 目录下可以看到如下的文件目录结构:

这些就是 Llama-Factory 训练出来的 LoRA。可以在自动生成的 Readme.md 文件查看 LoRA 的信息:

license: other
library_name: peft
tags:
- llama-factory
- lora
- generated_from_trainer
base_model: /app/models/llama3-hf/Meta-Llama-3-8B
model-index:
- name: llama3_cn_train_2024-04-27-16-32-46

。。。后面的内容省略

在 Ollama 中打造自己的中文版 Llama3

接下来,我们要在 Ollama 中运行 llama3 和我们训练出来的 LoRA,打造属于自己的中文版 Llama3。

Ollama 是一个开源的大模型管理工具,它提供了丰富的功能,包括模型的训练、部署、监控等。 通过Ollama,你可以轻松地管理本地的大模型,提高模型的训练速度和部署效率。 此外,Ollama还支持多种机器学习框架,如TensorFlow、PyTorch等,使得你可以根据自己的需求选择合适的框架进行模型的训练。

运行 Ollama docker

从 github 拉取 ollama 代码:

git clone https://github.com/ollama/ollama.git

Ollama github项目提供了参考的 Dockerfile,可以编译自己的 ollama 镜像并运行。也可以直接运行 ollama 官方发布的 docker 镜像:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

转换 LoRA 格式

按照 Ollama modelfile ADAPTER 的说明,Ollama 支持 ggml 格式的 LoRA,所以我们需要把刚才生成的 LoRA 转换成为 ggml 格式。为此,我们需要使用到 Llama.cpp 的某些脚本。有关 Llama.cpp 开源项目的介绍请参考本站另外一篇博文:Llama.cpp 上手实战指南 。

ADAPTER

The  ADAPTER instruction is an optional instruction that specifies any LoRA adapter that should apply to the base model. The value of this instruction should be an absolute path or a path relative to the Modelfile and the file must be in a GGML file format. The adapter should be tuned from the base model otherwise the behaviour is undefined.

在 llama.cpp 项目中,有如下几个用于转换格式的 python 脚本。我们将使用 conver-lora-to-ggml.py 脚本来转换格式。

运行如下的命令(其中 /app/output/llama3_cn_train_2024-04-27-16-32-46 是 Llama-Factory 生成 LoRA 的路径):

./conver-lora-to-ggml.py /app/output/llama3_cn_train_2024-04-27-16-32-46 llama

运行完这个命令后,将在 /app/output/llama3_cn_train_2024-04-27-16-32-46 下生成 ggml-adapter-model.bin 文件。这个文件就是 Ollama 需要的 ggml 格式的 LoRA 文件。

在 ollama 中创建自己的 llama3 中文模型

我们使用 ollama 的 modelfile 来创建自己的 llama3 中文模型。我自己使用的参考 llama3.modelfile 内容如下:

# set the base model
FROM llama3:8b

# set custom parameter values
PARAMETER temperature 1
PARAMETER num_keep 24
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
PARAMETER stop <|reserved_special_token

# set the model template
TEMPLATE """
{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>
"""

# set the system message
SYSTEM You are llama3 from Meta, customized and hosted @ HY's Blog (https://blog.yanghong.dev).

# set Chinese lora support
ADAPTER /root/.ollama/models/lora/ggml-adapter-model.bin

首先,通过命令行进入 ollama container:

docker exec -it ollama /bin/bash

然后使用我们刚才生成的 llama3.modelfile 来创建自己的中文版 Llama3,命名为 llama3:hy。

ollama create llama3:hy -f llama3.modelfile

创建成功后,运行如下的命令,则可以看到刚才创建的 llama3:hy 模型。

ollama list

执行如下的命令来运行 llama3:hy 模型,接下来我们就可以愉快地跟它进行中文对话了。

ollama run llama3:hy

我们同样问它本文开头的那两个问题:”你是谁?“,”介绍一下中国的首都北京“,看看它的表现如何。

你是谁?

>>> 你是谁?
我是一個 AI 型Chatbot,来自 Meta,目前被Customized 和 Hosted 在 HY 的博客(https://blog.yanghong.dev)。简单地说,我是一個能與人互動、回答問題和生成文本的 AI 机器人。

介绍一下中上海的旅游景点:

>>> 介绍一下上海的旅游景点
上海是一座流行的旅游目的地,拥有悠久历史、多样文化和现代建筑。以下是上海一些最受欢迎的旅游景点:

1. 外滨路(The Bund):黄浦江沿岸的一带,提供城市天际线的壮丽景象。此外,这里也有一些历史古楼、餐厅和酒吧。
2. 上海塔(Shanghai Tower):这是世界最高建筑之一,高度632米。从124层观光台可以欣赏到绕城全景。
3. 豫园(Yu Garden):明代的中国古典花园,known for its beautiful architecture, lush greenery and peaceful atmosphere.
4. 法租区(French Concession):一带拥有法国影响的街区,featuring colonial-era buildings, trendy boutiques和hip restaurants。
5. 新天地(Xintiandi):历史区域被转换为时尚购物和美食街区,known for its cobblestone streets, traditional Shikumen houses和vibrant nightlife.
6. 上海博物馆(Shanghai Museum):展示城市历史、艺术和文化的综合博物馆,有超过10,000件展品。
7. 人民广场(People's Square):一个大型公共广场,surrounded by iconic buildings包括上海大剧院、上海市政厅和中国革命博物馆。
8. 东方明珠塔(Oriental Pearl Tower):一座电视塔,提供城市全景观从263层观光台。
9. 朱家角水乡(Zhujiajiao Water Town):一个古老的水镇位于上海外围,known for its canals, bridges和traditional architecture.
10. 上海迪士尼度假 resort(Disneyland Resort Shanghai):一个世界一流的主题公园,featuring Disney, Pixar, Marvel和Star Wars attractions.

这些只是上海旅游景点之一。无论你是否感兴趣历史、文化、美食或娱乐,这座城市都有足够的选择!

可以看到,它基本上能以中文回答问题,我们的 LoRA fine tuning 过程成功完成了。

为中文 Llama3 添加 WebUI

Ollama 提供了 REST API 来跟 LLM 模型进行交互,比如最常用的 Generate,Chat 等方法。

Generate a response

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt":"Why is the sky blue?"
}'

Chat with a model

curl http://localhost:11434/api/chat -d '{
  "model": "llama3",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

完整的 REST API 文档可参阅 github 。

因此,我们可以开发一个简单的 gradio 程序,通过 REST API 调用 llama3:hy 模型来进行中文交互。参考代码片段如下:

        response = requests.post('http://192.168.3.204:11434/api/generate',
            json={
                'model': model2endpoint[model_name],
                'prompt': prompt,
                #'context': context,
                'options': {
                    'top_k': top_k,
                    'temperature': top_p,
                    'top_p': temperature
                }
            },
            stream=True
        )

        yield "", history, user_message, ""
        output = ""

        # Check if the request was successful
        response.raise_for_status()

        # Initialize the output and history variables
        output = ""

        # Iterate over the streamed response lines
        for idx, line in enumerate(response.iter_lines()):
            if line:
                # Parse the line as JSON
                data = json.loads(line)
                token = data.get('response', '')  # Assuming 'response' contains the text
                # Check if the token is a special token
                if data.get('special', False):
                    continue

                # Append the token to the output
                output += token

                # Update history and chat based on the index
                if idx == 0:
                    history.append(output.strip())  # Append initial output
                else:
                    history[-1] = output.strip()  # Update the last history entry

                # Convert history to chat format
                chat = [
                    (history[i], history[i + 1]) if i + 1 < len(history) else (history[i], "")
                    for i in range(0, len(history), 2)
                ]

            # Yield the current chat, history, and user message updates
            yield chat, history, user_message, ""

这样就可以通过上面的 WebUI 界面让它进行中文对话,问问题,帮我写代码了。同时也整合了其它的一些 coding LLM 在一起,碰到不会写的代码,就让它们在一起比比武。

以下视频是 fine tune 的中文 llama3 实际使用演示。

Llama3中文微调本地部署

如果您喜欢本文的内容,欢迎扫描下面的二维码访问作者的博客:HY's Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627146.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解xlsxwriter 操作Excel的常用API

我们知道可以通过pandas 对excel 中的数据进行处理分析&#xff0c;但是pandas本身对格式化数据方面提供了很少的支持&#xff0c;如果我们想对pandas进行数据分析后的数据进行格式化相关操作&#xff0c;我们可以使用xlsxwriter&#xff0c;本文就对xlsxwriter的常见excel格式…

Java聚合项目打包运行笔记

聚合项目创建 略 聚合项目打包配置 父工程 pom文件添加 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>…

【18-Ⅰ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

ROS2+TurtleBot3+Cartographer+Nav2实现slam建图和导航

0 引言 入门机器人最常见的应用就是slam建图和导航&#xff0c;本文将详细介绍这一流程&#xff0c; 便于初学这快速上手。 首先对需要用到的软件包就行简单介绍。 turtlebot3: 是一个小型的&#xff0c;基于ros的移动机器人。 学习机器人的很多示例程序都是基于turtlebot3。 …

Java入门之数据类型和变量

1.字面常量 字面常量就是在程序运行中&#xff0c;固定不变的量&#xff0c;例如如下的代码 public class Demo{public static void main(String[] args){System.Out.println("hello world!");System.Out.println(100);System.Out.println(3.14);System.Out.println…

Windows Docker 部署 Etcd 键值存储系统

一、简介 etcd 是一个由 CoreOS 团队发起的开源项目&#xff0c;它用 Go 语言实现&#xff0c;是一个分布式、高可用的键值存储系统。etcd 采用 Raft 算法&#xff0c;确保了数据的强一致性和高可用性&#xff0c;即使集群中有部分节点发生故障&#xff0c;也能保持服务的正常…

Github20K星开源团队协作工具:Zulip

Zulip&#xff1a;让团队协作的每一次交流&#xff0c;都精准高效。- 精选真开源&#xff0c;释放新价值。 概览 随着远程工作的兴起和团队协作的需求不断增加&#xff0c;群组聊天软件成为了日常工作中不可或缺的一部分。Zulip 是github上一个开源的团队协作工具&#xff0c;…

微信支付商户的“商家转账到零钱”产品快速开通指南

微信支付商户的“商家转账到零钱”功能为商家提供了便捷的转账途径&#xff0c;尤其适用于费用报销、员工福利发放、合作伙伴货款或分销返佣等多种场景。那么&#xff0c;如何快速开通这一功能呢&#xff0c;需要快速开通的商户可以联系小编。 首先&#xff0c;确保你的企业已经…

Java | Leetcode Java题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> grayCode(int n) {List<Integer> ret new ArrayList<Integer>();for (int i 0; i < 1 << n; i) {ret.add((i >> 1) ^ i);}return ret;} }

【vivado】 IBERT GT收发器误码率测试

一、前言 IBERT(Integrated Bit Error Ratio Tester),集成误码率测试仪。作为用户来说可以使用这个工具对自己设计的板子中的高速串行收发器进行简单测试&#xff0c;从而判断设计的接口是否有问题。因为这个工具是直接集成到FPGA上&#xff0c;这样一来直接使用这个工具来测试…

能播放SWF文件的FlashPlayer播放器

问题&#xff1a; 你是不是遇到了 flash 动画 放不了了&#xff1f; 以前的flash游戏玩不了了 在网上很难找到好用的&#xff0c;免费Flashplayer播放器&#xff0c; 找到的也没法保存.exe 以前买的课件放不了了 一打开就更新提示&#xff1a; 再不就是意外能打开了但【创建…

前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐Performance api计算持续时间&#x1f496; mark用法&#x1f496; measure用法 ⭐计算echarts渲染的持续时间⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端 performance api使用 —— mark、measure计…

Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

概念如下&#xff1a; 狄尔沃斯定理_百度百科 (baidu.com) 本质就是找要求序列中最长的单调的子序列&#xff08;不一定连续&#xff09;的长度。 模板如下&#xff1a; 时间复杂度为O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

3、架构-事务处理

目录 概述 场景事例 本地事务 实现原子性和持久性 实现隔离性 概述 事务处理几乎在每一个信息系统中都会涉及&#xff0c;它存在的意义是为 了保证系统中所有的数据都是符合期望的&#xff0c;且相互关联的数据之间不 会产生矛盾&#xff0c;即数据状态的一致性&#xff0…

meshlab: pymeshlab合并多个物体模型并保存(flatten visible layers)

一、关于环境 请参考&#xff1a;pymeshlab遍历文件夹中模型、缩放并导出指定格式-CSDN博客 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 本文所给出的例子是https://download.csdn.net/download/weixin_42605076/89233917中的…

np.linalg.norm()

np.linalg.norm()是NumPy中用于计算向量或矩阵的范数的函数。它可以计算不同类型的范数&#xff0c;包括向量的L1范数、L2范数以及矩阵的Frobenius范数等。 基本用法如下, numpy.linalg.norm(x, ordNone, axisNone, keepdimsFalse) x&#xff1a;输入数组&#xff0c;可以是…

Python | Leetcode Python题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:if not nums:return list()results list()nums.sort()visited [False] * len(nums)self.dfs(nums, results, list(), visited, 0)return resultsdef df…

elasticsearch使用Ngram实现任意位数手机号搜索

文章目录 Ngram自定义分词案例实战问题拆解 Ngram分词器定义Ngram分词定义Ngram分词示例Ngram分词应用场景 Ngram分词实战 Ngram自定义分词案例 当对keyword类型的字段进行高亮查询时&#xff0c;若值为123asd456&#xff0c;查询sd4&#xff0c;则高亮结果是&#xff1c;em&a…

欧洲风景(地理)

1.尼斯湖 尼斯湖亦译内斯湖&#xff0c;位于英国苏格兰高原北部的大峡谷中&#xff0c;湖长39公里&#xff0c;宽2.4公里。面积并不大&#xff0c;却很深。传说这儿住着一只水怪&#xff0c;因此吸引了大量游客。 2.伦敦塔桥 伦敦塔桥是从英国伦敦泰晤士河口算起的第一座桥(泰…

类图及类的关系

类图&#xff08;Class Diagram&#xff09;是UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;中的一种图&#xff0c;用于描述系统中类的静态结构&#xff0c;包括类的属性、方法以及类之间的关系。 一、类 类&#xff08;Class&#xff09;…