实践OpenVINO™ GenAI

前言

随着 ChatGPT 等聊天机器人的风暴席卷全球,生成式预训练 Transformers (GPT) 在开发者中正在成为家喻户晓的新名字。生成式 AI(GenAI) 的发展,尤其是大语言模型和聊天机器人的进步很快、变化不断,很难预测接下来会有什么突破,开发者应该关注什么。我们知道生成式 AI 将继续存在,开发人员希望看到在本地开发、维护和部署 AI 应用程序的更简洁明了的方法。使用 Optimum-Intel 和 OpenVINO™ GenAI 来优化和部署 Hugging Face Transformers 模型,在这里完整说明 AI 模型的分析、优化及部署的步骤。

OpenVINO简介

Intel OpenVINO (Open Visual Inference and Neural Networks Optimization) Toolkit 是一个由英特尔提供的一组优化工具和库,用于加速人工智能 (AI) 和深度学习推理。这个工具包为开发者提供了高度优化的模型转换器、运行时环境以及开发工具,旨在简化 AI 模型在多平台上的部署过程。

主要功能与组件:

  1. 模型优化:OpenVINO 提供了将模型从不同的机器学习框架(如 TensorFlow, PyTorch, ONNX 等)转换为通用中间表示 (IR) 的工具。然后,可以进一步将此 IR 转换为目标平台上的高效二进制格式,从而实现快速推理。

  2. 运行时:提供了 OpenVINO 运行时库(Inference Engine),可以在多种硬件平台上执行优化后的模型。这包括从CPU、GPU到NPU等加速器,以获得最佳性能和资源利用。

  3. 集成与开发工具

    • Model Optimizer: 用于模型转换的高级API。
    • Inference Engine: 提供了多平台兼容性,支持多种输入格式,并优化了推理过程。
    • Intel CPU, GPU, 和 FPGA 专用插件: 为特定硬件提供高度优化的执行性能。
  4. 性能优化:通过硬件加速和编译器技术,OpenVINO 可以显著提高模型在目标平台上的运行速度与效率。

  5. 跨框架支持:允许开发者使用熟悉的机器学习库来训练模型,并通过 OpenVINO 来进行推理部署。

应用场景:

  • 视觉应用:如图像分类、对象检测和语义分割。
  • 自然语言处理:虽然 OpenVINO 更侧重于视觉任务,但也支持 NLP 的某些任务,如文本分类或情感分析的推理加速。
  • 物联网和边缘计算:在低功耗设备上进行实时 AI 推理。
  • 自动驾驶:用于视觉感知、目标检测等关键功能。

开发者资源:

Intel 提供了丰富的文档、教程、示例代码和社区支持,帮助开发者快速上手并优化他们的应用。此外,OpenVINO 也与许多主流操作系统(如 Linux 和 Windows)以及开发环境(如 Visual Studio, PyCharm 等)兼容。

配置环境与程序设计

通过 Python API 运行 LLM 文本生成的推理

pip安装源,临时使用样例:pip install xxx -i url

部分国内常见的开源镜像站

镜像站名 网址

清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/
阿里云开源镜像站 http://mirrors.aliyun.com/
中国科学技术大学 http://mirrors.ustc.edu.cn/
网易开源镜像站 http://mirrors.163.com/
搜狐开源镜像 http://mirrors.sohu.com/
浙江大学开源镜像站 http://mirrors.zju.edu.cn/
腾讯开源镜像站 http://mirrors.cloud.tencent.com/pypi/simple
豆瓣开源镜像站 http://pypi.douban.com/simple/

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

conda update -n base -c defaults conda

创建新环境

conda create -n ov-Qwen python=3.10

## Package Plan ##environment location: d:\Users\anaconda3\envs\ov-Qwenadded / updated specs:- python=3.10The following packages will be downloaded:package                    |            build---------------------------|-----------------python-3.10.15             |       h4607a30_1        16.2 MB------------------------------------------------------------Total:        16.2 MBThe following NEW packages will be INSTALLED:bzip2              pkgs/main/win-64::bzip2-1.0.8-h2bbff1b_6ca-certificates    pkgs/main/win-64::ca-certificates-2024.9.24-haa95532_0libffi             pkgs/main/win-64::libffi-3.4.4-hd77b12b_1openssl            pkgs/main/win-64::openssl-3.0.15-h827c3e9_0pip                pkgs/main/win-64::pip-24.2-py310haa95532_0python             pkgs/main/win-64::python-3.10.15-h4607a30_1setuptools         pkgs/main/win-64::setuptools-75.1.0-py310haa95532_0sqlite             pkgs/main/win-64::sqlite-3.45.3-h2bbff1b_0tk                 pkgs/main/win-64::tk-8.6.14-h0416ee5_0tzdata             pkgs/main/noarch::tzdata-2024b-h04d1e81_0vc                 pkgs/main/win-64::vc-14.40-h2eaa2aa_1vs2015_runtime     pkgs/main/win-64::vs2015_runtime-14.40.33807-h98bb1dd_1wheel              pkgs/main/win-64::wheel-0.44.0-py310haa95532_0xz                 pkgs/main/win-64::xz-5.4.6-h8cc25b3_1zlib               pkgs/main/win-64::zlib-1.2.13-h8cc25b3_1Proceed ([y]/n)? yDownloading and Extracting Packages
python-3.10.15       | 16.2 MB   | ############################################################################ | 100%
zlib-1.2.13          | 131 KB    | ############################################################################ | 100%
pip-24.2             | 2.5 MB    | ############################################################################ | 100%
setuptools-75.1.0    | 1.6 MB    | ############################################################################ | 100%
tk-8.6.14            | 3.5 MB    | ############################################################################ | 100%
vc-14.40             | 10 KB     | ############################################################################ | 100%
libffi-3.4.4         | 122 KB    | ############################################################################ | 100%
openssl-3.0.15       | 7.8 MB    | ############################################################################ | 100%
xz-5.4.6             | 609 KB    | ############################################################################ | 100%
wheel-0.44.0         | 138 KB    | ############################################################################ | 100%
tzdata-2024b         | 115 KB    | ############################################################################ | 100%
sqlite-3.45.3        | 973 KB    | ############################################################################ | 100%
bzip2-1.0.8          | 90 KB     | ############################################################################ | 100%Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate ov-Qwen
#
# To deactivate an active environment, use
#
#     $ conda deactivate

激活新环境

(base) C:\Users>conda activate ov-Qwen

 安装OpenVINO

 pip install openvino-genai==2024.3.0 optimum[openvino]

(ov-Qwen) C:\Users>pip install openvino-genai==2024.3.0 optimum[openvino]
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting openvino-genai==2024.3.0Downloading https://mirrors.aliyun.com/pypi/packages/ce/d4/227290284dfa79eb76100b4b4eef7f7a17e23826800d49922f429bd8a4d4/openvino_genai-2024.3.0.0-cp310-cp310-win_amd64.whl (947 kB)---------------------------------------- 947.8/947.8 kB 8.8 MB/s eta 0:00:00(ov-Qwen) C:\Users>pip install opencv-python jupyter notebook openai appbuilder-sdk qianfan
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting opencv-pythonDownloading https://mirrors.aliyun.com/pypi/packages/ec/6c/fab8113424af5049f85717e8e527ca3773299a3c6b02506e66436e19874f/opencv_python-4.10.0.84-cp37-abi3-win_amd64.whl (38.8 MB)---------------------------------------- 38.8/38.8 MB 11.2 MB/s eta 0:00:00

Qwen2开源模型简介

阿里巴巴通义千问团队发布了Qwen2系列开源模型,Qwen2 是 Qwen 大型语言模型的新系列。对于 Qwen2,我们发布了许多基本语言模型和指令调整语言模型,参数范围从 0.5 到 720 亿个参数不等,包括 Mixture-of-Experts 模型。此存储库包含指令调整的 7B Qwen2 模型。

与最先进的开源语言模型(包括之前发布的 Qwen1.5)相比,Qwen2 总体上超越了大多数开源模型,并在针对语言理解、语言生成、多语言能力、编码、数学、推理等的一系列基准中展示了与专有模型的竞争力。

在此存储库中,我们提供了 GGUF 格式的 fp16 模型和量化模型,包括 q5_0、q5_k_m、q6_k 和 q8_0。

型号详细信息
Qwen2 是一个语言模型系列,包括不同模型大小的解码器语言模型。对于每个大小,我们都会发布基本语言模型和对齐的聊天模型。它基于 Transformer 架构,具有 SwiGLU 激活、注意力 QKV bias、群组查询注意力等。此外,我们还改进了适用于多种自然语言和代码的分词器。

培训详情
我们使用大量数据对模型进行了预训练,并使用监督微调和直接偏好优化对模型进行了后训练。

要求
我们建议您按照官方指南克隆llama.cpp并安装它。我们遵循最新版本的 llama.cpp。在以下演示中,我们假设您在存储库 llama.cpp下运行命令。

安装Python依赖

在启动Qwen2-7B大模型之前,我们首先需要安装Python依赖包列表:

pip install llama-cpp-python
pip install openai
pip install uvicorn
pip install starlette
pip install fastapi
pip install sse_starlette
pip install starlette_context
pip install pydantic_settings

安装ModelScope

pip install modelscope

(ov-Qwen) C:\Users\yuan>pip install modelscope
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting modelscopeDownloading https://mirrors.aliyun.com/pypi/packages/5d/96/fbcdd3015d6a34f78ffbf870ced519bdb961c260e81e90888684f4e768e2/modelscope-1.19.1-py3-none-any.whl (5.8 MB)---------------------------------------- 5.8/5.8 MB 3.0 MB/s eta 0:00:00
Requirement already satisfied: requests>=2.25 in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from modelscope) (2.32.3)
Requirement already satisfied: tqdm>=4.64.0 in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from modelscope) (4.66.5)
Requirement already satisfied: urllib3>=1.26 in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from modelscope) (1.26.20)
Requirement already satisfied: charset-normalizer<4,>=2 in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from requests>=2.25->modelscope) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from requests>=2.25->modelscope) (3.10)
Requirement already satisfied: certifi>=2017.4.17 in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from requests>=2.25->modelscope) (2024.8.30)
Requirement already satisfied: colorama in d:\users\yuan\anaconda3\envs\ov-qwen\lib\site-packages (from tqdm>=4.64.0->modelscope) (0.4.6)
Installing collected packages: modelscope
Successfully installed modelscope-1.19.1

Git模型下载

git clone https://www.modelscope.cn/snake7gun/Qwen2-7B-Instruct-int4-ov.git

admin@desktop MINGW64 /d/software/nvidiacn/openVINO GenAI
$ git clone https://www.modelscope.cn/snake7gun/Qwen2-7B-Instruct-int4-ov.git
Cloning into 'Qwen2-7B-Instruct-int4-ov'...
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 26 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (26/26), 3.79 MiB | 4.67 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Updating files: 100% (15/15), done.
Filtering content: 100% (3/3), 838.93 MiB | 1.50 MiB/s, done.

conda ov-Qwen 环境 启动Llama大模型

python -m llama_cpp.server --host 0.0.0.0 --model qwen2-7b-instruct-q4_k_m.gguf --n_ctx 204


(ov-Qwen) D:\s\tyqw2-7b>python -m llama_cpp.server --host 0.0.0.0 --model qwen2-7b-instruct-q4_k_m.gguf --n_ctx 204
llama_model_loader: loaded meta data with 26 key-value pairs and 339 tensors from qwen2-7b-instruct-q4_k_m.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = qwen2
llama_model_loader: - kv   1:                               general.name str              = qwen2-7b-instruct
llama_model_loader: - kv   2:                          qwen2.block_count u32              = 28
llama_model_loader: - kv   3:                       qwen2.context_length u32              = 32768
llama_model_loader: - kv   4:                     qwen2.embedding_length u32              = 3584
llama_model_loader: - kv   5:                  qwen2.feed_forward_length u32              = 18944
llama_model_loader: - kv   6:                 qwen2.attention.head_count u32              = 28
llama_model_loader: - kv   7:              qwen2.attention.head_count_kv u32              = 4
llama_model_loader: - kv   8:                       qwen2.rope.freq_base f32              = 1000000.000000
llama_model_loader: - kv   9:     qwen2.attention.layer_norm_rms_epsilon f32              = 0.000001
llama_model_loader: - kv  10:                          general.file_type u32              = 15
llama_model_loader: - kv  11:                       tokenizer.ggml.model str              = gpt2
llama_model_loader: - kv  12:                         tokenizer.ggml.pre str              = qwen2
llama_model_loader: - kv  13:                      tokenizer.ggml.tokens arr[str,152064]  = ["!", "\"", "#", "$", "%", "&", "'", ...
llama_model_loader: - kv  14:                  tokenizer.ggml.token_type arr[i32,152064]  = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
llama_model_loader: - kv  15:                      tokenizer.ggml.merges arr[str,151387]  = ["Ġ Ġ", "ĠĠ ĠĠ", "i n", "Ġ t",...
llama_model_loader: - kv  16:                tokenizer.ggml.eos_token_id u32              = 151645
llama_model_loader: - kv  17:            tokenizer.ggml.padding_token_id u32              = 151643
llama_model_loader: - kv  18:                tokenizer.ggml.bos_token_id u32              = 151643
llama_model_loader: - kv  19:                    tokenizer.chat_template str              = {% for message in messages %}{% if lo...
llama_model_loader: - kv  20:               tokenizer.ggml.add_bos_token bool             = false
llama_model_loader: - kv  21:               general.quantization_version u32              = 2
llama_model_loader: - kv  22:                      quantize.imatrix.file str              = ../Qwen2/gguf/qwen2-7b-imatrix/imatri...
llama_model_loader: - kv  23:                   quantize.imatrix.dataset str              = ../sft_2406.txt
llama_model_loader: - kv  24:             quantize.imatrix.entries_count i32              = 196
llama_model_loader: - kv  25:              quantize.imatrix.chunks_count i32              = 1937
llama_model_loader: - type  f32:  141 tensors
llama_model_loader: - type q4_K:  169 tensors
llama_model_loader: - type q6_K:   29 tensors
llm_load_vocab: special tokens cache size = 421
llm_load_vocab: token to piece cache size = 0.9352 MB
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = qwen2
llm_load_print_meta: vocab type       = BPE
llm_load_print_meta: n_vocab          = 152064
llm_load_print_meta: n_merges         = 151387
llm_load_print_meta: vocab_only       = 0
llm_load_print_meta: n_ctx_train      = 32768
llm_load_print_meta: n_embd           = 3584
llm_load_print_meta: n_layer          = 28
llm_load_print_meta: n_head           = 28
llm_load_print_meta: n_head_kv        = 4
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_swa            = 0
llm_load_print_meta: n_embd_head_k    = 128
llm_load_print_meta: n_embd_head_v    = 128
llm_load_print_meta: n_gqa            = 7
llm_load_print_meta: n_embd_k_gqa     = 512
llm_load_print_meta: n_embd_v_gqa     = 512
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-06
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: f_logit_scale    = 0.0e+00
llm_load_print_meta: n_ff             = 18944
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: causal attn      = 1
llm_load_print_meta: pooling type     = 0
llm_load_print_meta: rope type        = 2
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 1000000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_ctx_orig_yarn  = 32768
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: ssm_d_conv       = 0
llm_load_print_meta: ssm_d_inner      = 0
llm_load_print_meta: ssm_d_state      = 0
llm_load_print_meta: ssm_dt_rank      = 0
llm_load_print_meta: ssm_dt_b_c_rms   = 0
llm_load_print_meta: model type       = ?B
llm_load_print_meta: model ftype      = Q4_K - Medium
llm_load_print_meta: model params     = 7.62 B
llm_load_print_meta: model size       = 4.36 GiB (4.91 BPW)
llm_load_print_meta: general.name     = qwen2-7b-instruct
llm_load_print_meta: BOS token        = 151643 '<|endoftext|>'
llm_load_print_meta: EOS token        = 151645 '<|im_end|>'
llm_load_print_meta: PAD token        = 151643 '<|endoftext|>'
llm_load_print_meta: LF token         = 148848 'ÄĬ'
llm_load_print_meta: EOT token        = 151645 '<|im_end|>'
llm_load_print_meta: EOG token        = 151643 '<|endoftext|>'
llm_load_print_meta: EOG token        = 151645 '<|im_end|>'
llm_load_print_meta: max token length = 256
llm_load_tensors: ggml ctx size =    0.15 MiB
llm_load_tensors:        CPU buffer size =  4460.45 MiB
...................................................................................
llama_new_context_with_model: n_ctx      = 224
llama_new_context_with_model: n_batch    = 204
llama_new_context_with_model: n_ubatch   = 204
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base  = 1000000.0
llama_new_context_with_model: freq_scale = 1
llama_kv_cache_init:        CPU KV buffer size =    12.25 MiB
llama_new_context_with_model: KV self size  =   12.25 MiB, K (f16):    6.12 MiB, V (f16):    6.12 MiB
llama_new_context_with_model:        CPU  output buffer size =     0.58 MiB
llama_new_context_with_model:        CPU compute buffer size =   121.13 MiB
llama_new_context_with_model: graph nodes  = 986
llama_new_context_with_model: graph splits = 1
AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | RISCV_VECT = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 |
Model metadata: {'qwen2.attention.head_count': '28', 'general.name': 'qwen2-7b-instruct', 'general.architecture': 'qwen2', 'qwen2.block_count': '28', 'qwen2.context_length': '32768', 'qwen2.attention.head_count_kv': '4', 'quantize.imatrix.dataset': '../sft_2406.txt', 'qwen2.embedding_length': '3584', 'general.quantization_version': '2', 'tokenizer.ggml.bos_token_id': '151643', 'qwen2.feed_forward_length': '18944', 'tokenizer.ggml.padding_token_id': '151643', 'qwen2.rope.freq_base': '1000000.000000', 'qwen2.attention.layer_norm_rms_epsilon': '0.000001', 'tokenizer.ggml.eos_token_id': '151645', 'general.file_type': '15', 'tokenizer.ggml.model': 'gpt2', 'tokenizer.ggml.pre': 'qwen2', 'tokenizer.chat_template': "{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}", 'tokenizer.ggml.add_bos_token': 'false', 'quantize.imatrix.chunks_count': '1937', 'quantize.imatrix.file': '../Qwen2/gguf/qwen2-7b-imatrix/imatrix.dat', 'quantize.imatrix.entries_count': '196'}
Available chat formats from metadata: chat_template.default
Using gguf chat template: {% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system
You are a helpful assistant.<|im_end|>
' }}{% endif %}{{'<|im_start|>' + message['role'] + '
' + message['content'] + '<|im_end|>' + '
'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant
' }}{% endif %}
Using chat eos_token: <|im_end|>
Using chat bos_token: <|endoftext|>
[32mINFO[0m:     Started server process [[36m11564[0m]
[32mINFO[0m:     Waiting for application startup.
[32mINFO[0m:     Application startup complete.
[32mINFO[0m:     Uvicorn running on [1mhttp://0.0.0.0:8000[0m (Press CTRL+C to quit)

安装 OpenVINO™ 后,您可以开始在 GenAI 和 LLM 模型上运行推理。通过利用此 API,您可以加载模型,向其传递上下文,并仅使用几行代码接收响应。在内部,OpenVINO™ 处理输入文本的标记化,在您选择的设备上执行生成循环,并提供最终响应。

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 23 12:29:01 2024
Optimum-Intel 和 OpenVINO™ GenAI 的结合为在端侧部署 Hugging Face 模型提供了强大而灵活的解决方案。通过遵循这些步骤,您可以在 Python 可能不是理想选择的环境中实现优化的高性能 AI 推理,以确保您的应用在 Intel 硬件上平稳运行。
总结来说,CUDA和OpenVINO的主要区别在于:目标和用途:CUDA主要用于高性能计算和深度学习,而OpenVINO主要用于计算机视觉和深度学习推理。
灵活性:CUDA提供高度的灵活性,允许开发者直接控制GPU架构;而OpenVINO提供高级抽象层,简化了开发过程。
支持的硬件:CUDA主要支持NVIDIA GPU,而OpenVINO支持英特尔平台的硬件加速器。
模型训练与推理:CUDA主要用于模型训练,而OpenVINO主要用于模型推理。
因此,选择CUDA还是OpenVINO取决于具体的应用需求和硬件环境。"""
import openvino_genai as ov_genai
from openvino.runtime import Coredef streamer(subword):print(subword, end='', flush=True)# Return flag corresponds whether generation should be stopped.# False means continue generation.return Falsedef chat_qwen_ov(question):prompt_machine = "<|im_start|>system\n<|im_end|>\n<|im_start|>user\n"+question+"<|im_end|>\n<|im_start|>"result = pipe.generate(prompt_machine)#提示词#prompt = "<|im_start|>system\n<|im_end|>\n<|im_start|>user\n什么是OpenVINO?<|im_end|>\n<|im_start|>"#大模型推理预测#result = pipe.generate(prompt)'''['Assistant: OpenVINO 是一个由英特尔开发的开源计算机视觉和深度学习框架。它提供了一套工具和API,用于在各种设备上部署和优化深度学习模型,特别是针对英特尔硬件(如CPU、GPU和NPU)进行优化。\n\nOpenVINO 的主要功能包括:\n\n1. **模型优化**:它能够将深度学习模型转换为更高效的格式,以便在不同的硬件平台上运行。这包括对模型进行剪枝、量化和转换,以减少计算和内存需求。\n\n2. **运行时**:OpenVINO 提供了一个运行时环境,用于在各种硬件平台上执行优化后的模型。这使得开发者能够轻松地在不同的设备上部署他们的模型,而无需重新编写代码。\n\n3. **支持多种框架**:它支持多种深度学习框架,如 TensorFlow、Caffe、ONNX 等,允许开发者使用他们熟悉的框架来构建模型,然后在 OpenVINO 中进行优化和部署。\n\n4. **视觉API**:除了模型优化和运行时,OpenVINO 还提供了一组视觉API,用于处理图像和视频数据,执行任务如物体检测、图像分类、面部识别等。\n\n5. **性能优化**:OpenVINO 通过利用硬件特定的加速技术,如多线程、异步执行和内存优化,来提高模型的执行速度和效率。\n\n总之,OpenVINO 是一个强大的工具,旨在简化深度学习模型的部署和优化过程,特别是针对英特尔硬件,以实现高性能和高效能的计算机视觉和深度学习应用。']'''return result.texts[0]def main():prompt = input('question:\n')if 'Stop!' == prompt:returnresult = chat_qwen_ov(prompt)print(result)print('\n----------')if '__main__' == __name__:ie = Core()print("使用Core()初始化推理引擎: {}".format(ie))#选择计算设备#device = 'CPU'device = 'GPU'#device = 'NPU'#载入OpenVINO IR格式的大模型pipe = ov_genai.LLMPipeline("Qwen2-7B-Instruct-int4-ov", device)print(chat_qwen_ov("OpenVINO怎么样?"))main()

使用Core()初始化推理引擎: <Core: available plugins[CPU, GPU]>
Assistant: OpenVINO(Open Visual Inference and Neural Networks)是由英特尔开发的一套开源工具和API,用于在各种设备上部署深度学习模型。它主要针对计算机视觉任务,但同时也支持其他类型的神经网络模型。OpenVINO提供了一系列优化工具,可以将训练好的模型转换为高性能的推理引擎,支持在CPU、GPU、VPU(Vision Processing Unit)等不同硬件平台上运行。OpenVINO的特点包括:1. **模型优化**:它能够自动优化模型以适应不同的硬件平台,提高模型的推理速度和效率。
2. **多平台支持**:支持多种硬件平台,包括Intel CPU、Intel GPU、Intel Movidius VPU等,同时也支持其他第三方硬件。
3. **高性能**:通过使用Intel的优化库和编译器技术,OpenVINO能够提供比原始模型更快的推理速度。
4. **API和库**:提供了一系列API和库,方便开发者在不同的编程语言(如C++、Python等)中使用。
5. **模型转换**:支持多种深度学习框架的模型导入,如TensorFlow、ONNX、Caffe等,方便模型的迁移和复用。OpenVINO广泛应用于各种场景,包括但不限于自动驾驶、安防监控、机器人视觉、图像处理等。对于希望在实际设备上部署深度学习模型的开发者和企业来说,OpenVINO是一个强大的工具,能够帮助加速模型的部署过程并提高性能。
question:
软件开发者如何快速入门深度学习?
答案:快速入门深度学习对于软件开发者来说是一个既充满挑战又充满机遇的过程。以下是一些建议,帮助你从零开始学习深度学习:### 1. **理解基础概念**- **数学基础**:学习线性代数、概率论和微积分,这些是深度学习的基础。- **机器学习基础**:理解监督学习、无监督学习、强化学习等基本概念,以及常见的机器学习算法(如线性回归、逻辑回归、决策树等)。### 2. **选择学习资源**- **在线课程**:Coursera、edX、Udacity等平台上有很多深度学习的课程,如Andrew Ng的“机器学习”课程,以及专门的深度学习课程。- **书籍**:《深度学习》(Ian Goodfellow等人著)、《动手学深度学习》(Sebastian Ruder著)等书籍提供了深入的理论和实践指导。- **博客和教程**:关注像Medium、Towards Data Science等平台上的深度学习文章和教程。### 3. **实践项目**- **动手实践**:通过实际项目来加深理解。可以从简单的图像分类任务开始,如使用TensorFlow或PyTorch框架。- **开源项目**:参与或贡献到开源深度学习项目,如TensorFlow、PyTorch或Keras,可以快速提升技能并了解行业实践。### 4. **掌握工具和技术**- **编程语言**:Python是深度学习的首选语言,因为有丰富的库支持,如NumPy、Pandas、Matplotlib等用于数据处理和可视化,以及TensorFlow、PyTorch等用于深度学习。- **框架和库**:熟悉至少一个深度学习框架,如TensorFlow或PyTorch,它们提供了构建和训练模型的便利。### 5. **持续学习和适应**- **社区参与**:加入深度学习相关的社区和论坛,如Reddit的机器学习版块、Stack Overflow等,可以获取帮助和分享经验。- **跟踪最新研究**:关注顶级会议(如ICML、NeurIPS、CVPR)的最新论文和成果,了解深度学习的最新进展。### 6. **解决实际问题**- 尝试解决实际问题,无论是通过参加比赛(如Kaggle上的数据科学比赛)、解决公司内部问题,还是开发个人项目,实践是检验学习成果的最好方式。### 结语
深度学习是一个不断发展的领域,快速入门后,持续学习和实践是关键。通过上述步骤,你可以逐步建立起坚实的深度学习基础,并在实践中不断提升自己的技能。----------

使用 OpenVINO 来进行端侧部署完成

用Ollama管理通义千问2-7B-Instruct-GGUF

Ol llama,全名为“Ollama”,是阿里云推出的一款面向开发者的人工智能助手工具,旨在帮助AI模型开发、部署与管理。对于管理大型语言模型,如GPT-3或通义千问等,Ol llama提供了以下关键功能:

  1. 代码集成支持:支持将大模型的训练和推理逻辑无缝集成到您的代码中,简化了模型调用流程。

  2. API接口服务

    • 文本生成: 提供基于给定提示或输入生成文本的功能。
    • 问答系统: 可以用于问答任务,帮助解答用户问题并给出相关答案。
    • 语言理解与翻译: 支持对多语言的文本进行理解和转换。
  3. 训练资源管理

    • Ol llama可能支持通过API直接访问和管理模型训练所需的计算资源(如GPU集群、云服务器等),从而优化训练效率。
    • 管理训练任务,包括启动、暂停、恢复或取消训练过程,以及监控训练进度。
  4. 部署与运行环境配置

    • 提供简单的方式将训练好的大模型部署为在线服务,可以通过API接口访问推理结果。
    • 配置和管理推理服务器,包括资源分配(如CPU/GPU资源)、负载均衡、安全性等设置。
  5. 性能优化与监控

    • 根据实际应用需求调整模型的运行参数以优化性能,例如调整batch size、温度值等超参数。
    • 实时监控模型服务的状态和响应时间,对异常进行快速诊断和恢复。
  6. 安全与合规性

    • 支持安全性相关的设置,如访问控制、数据加密传输、隐私保护等,确保模型的使用符合相关法规要求。
  7. 资源成本管理:提供费用预估和监控功能,帮助开发者了解和控制训练和运行服务的成本。

通过Ol llama,开发者可以更高效地管理和利用大语言模型资源,减少开发和运维复杂度,专注于构建更高价值的应用。具体操作步骤及API文档可参考阿里云官方提供的指南或API手册获取详细信息。

https://ollama.com/

下载2-7B-Instruct-GGUF

下载网址https://modelscope.cn/models/qwen/Qwen2-7B-Instruct-GGUF/files

创建Modelfile.txt文件,写入模型地址

FROM ./qwen2-7b-instruct-q4_k_m.gguf

ollama cmd指令窗口运行该文件,即可运行模型。

基于GGUF模型文件创建Ollama模型,在我们存放Qwen2-7B的 GGUF 模型文件目录中,创建一个文件名为Modelfile的文件,该文件的内容如下:FROM ./qwen2-7b-instruct-q4_k_m.gguf
然后在Terminal终端,使用这个文件创建Ollama模型,这里我把Ollama的模型取名为Qwen2-7B:
$ ollama create Qwen2-7B -f ./Modelfile
transferring model data 
using existing layer sha256:24f4471ef69198bf4dbbc4409828341fbd85923319a801035e651d9fe2a7e3c1 
creating new layer sha256:24f4471ef69198bf4dbbc4409828341fbd85923319a801035e651d9fe2a7e3c1 
writing manifest 
success
最后,通过Ollama启动我们刚创建的大语言模型:ollama run Qwen2-7B

# n_ctx=20480代表单次回话最大20480个Token数量
python -m llama_cpp.server  --host 0.0.0.0 --model qwen2-7b-instruct-q4_k_m.gguf --n_ctx 20480

(ov-Qwen) D:\software\nvidiacn\tyqw2-7b>python -m llama_cpp.server  --host 0.0.0.0 --model qwen2-7b-instruct-q4_k_m.gguf --n_ctx 2048
llama_model_loader: loaded meta data with 26 key-value pairs and 339 tensors from qwen2-7b-instruct-q4_k_m.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = qwen2
llama_model_loader: - kv   1:                               general.name str              = qwen2-7b-instruct
llama_model_loader: - kv   2:                          qwen2.block_count u32              = 28
llama_model_loader: - kv   3:                       qwen2.context_length u32              = 32768
llama_model_loader: - kv   4:                     qwen2.embedding_length u32              = 3584
llama_model_loader: - kv   5:                  qwen2.feed_forward_length u32              = 18944
llama_model_loader: - kv   6:                 qwen2.attention.head_count u32              = 28
llama_model_loader: - kv   7:              qwen2.attention.head_count_kv u32              = 4
llama_model_loader: - kv   8:                       qwen2.rope.freq_base f32              = 1000000.000000
llama_model_loader: - kv   9:     qwen2.attention.layer_norm_rms_epsilon f32              = 0.000001
llama_model_loader: - kv  10:                          general.file_type u32              = 15
llama_model_loader: - kv  11:                       tokenizer.ggml.model str              = gpt2
llama_model_loader: - kv  12:                         tokenizer.ggml.pre str              = qwen2
llama_model_loader: - kv  13:                      tokenizer.ggml.tokens arr[str,152064]  = ["!", "\"", "#", "$", "%", "&", "'", ...
llama_model_loader: - kv  14:                  tokenizer.ggml.token_type arr[i32,152064]  = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
llama_model_loader: - kv  15:                      tokenizer.ggml.merges arr[str,151387]  = ["Ġ Ġ", "ĠĠ ĠĠ", "i n", "Ġ t",...
llama_model_loader: - kv  16:                tokenizer.ggml.eos_token_id u32              = 151645
llama_model_loader: - kv  17:            tokenizer.ggml.padding_token_id u32              = 151643
llama_model_loader: - kv  18:                tokenizer.ggml.bos_token_id u32              = 151643
llama_model_loader: - kv  19:                    tokenizer.chat_template str              = {% for message in messages %}{% if lo...
llama_model_loader: - kv  20:               tokenizer.ggml.add_bos_token bool             = false
llama_model_loader: - kv  21:               general.quantization_version u32              = 2
llama_model_loader: - kv  22:                      quantize.imatrix.file str              = ../Qwen2/gguf/qwen2-7b-imatrix/imatri...
llama_model_loader: - kv  23:                   quantize.imatrix.dataset str              = ../sft_2406.txt
llama_model_loader: - kv  24:             quantize.imatrix.entries_count i32              = 196
llama_model_loader: - kv  25:              quantize.imatrix.chunks_count i32              = 1937
llama_model_loader: - type  f32:  141 tensors
llama_model_loader: - type q4_K:  169 tensors
llama_model_loader: - type q6_K:   29 tensors
llm_load_vocab: special tokens cache size = 421
llm_load_vocab: token to piece cache size = 0.9352 MB
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = qwen2
llm_load_print_meta: vocab type       = BPE
llm_load_print_meta: n_vocab          = 152064
llm_load_print_meta: n_merges         = 151387
llm_load_print_meta: vocab_only       = 0
llm_load_print_meta: n_ctx_train      = 32768
llm_load_print_meta: n_embd           = 3584
llm_load_print_meta: n_layer          = 28
llm_load_print_meta: n_head           = 28
llm_load_print_meta: n_head_kv        = 4
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_swa            = 0
llm_load_print_meta: n_embd_head_k    = 128
llm_load_print_meta: n_embd_head_v    = 128
llm_load_print_meta: n_gqa            = 7
llm_load_print_meta: n_embd_k_gqa     = 512
llm_load_print_meta: n_embd_v_gqa     = 512
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-06
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: f_logit_scale    = 0.0e+00
llm_load_print_meta: n_ff             = 18944
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: causal attn      = 1
llm_load_print_meta: pooling type     = 0
llm_load_print_meta: rope type        = 2
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 1000000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_ctx_orig_yarn  = 32768
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: ssm_d_conv       = 0
llm_load_print_meta: ssm_d_inner      = 0
llm_load_print_meta: ssm_d_state      = 0
llm_load_print_meta: ssm_dt_rank      = 0
llm_load_print_meta: ssm_dt_b_c_rms   = 0
llm_load_print_meta: model type       = ?B
llm_load_print_meta: model ftype      = Q4_K - Medium
llm_load_print_meta: model params     = 7.62 B
llm_load_print_meta: model size       = 4.36 GiB (4.91 BPW)
llm_load_print_meta: general.name     = qwen2-7b-instruct
llm_load_print_meta: BOS token        = 151643 '<|endoftext|>'
llm_load_print_meta: EOS token        = 151645 '<|im_end|>'
llm_load_print_meta: PAD token        = 151643 '<|endoftext|>'
llm_load_print_meta: LF token         = 148848 'ÄĬ'
llm_load_print_meta: EOT token        = 151645 '<|im_end|>'
llm_load_print_meta: EOG token        = 151643 '<|endoftext|>'
llm_load_print_meta: EOG token        = 151645 '<|im_end|>'
llm_load_print_meta: max token length = 256
llm_load_tensors: ggml ctx size =    0.15 MiB
llm_load_tensors:        CPU buffer size =  4460.45 MiB
...................................................................................
llama_new_context_with_model: n_ctx      = 2048
llama_new_context_with_model: n_batch    = 512
llama_new_context_with_model: n_ubatch   = 512
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base  = 1000000.0
llama_new_context_with_model: freq_scale = 1
llama_kv_cache_init:        CPU KV buffer size =   112.00 MiB
llama_new_context_with_model: KV self size  =  112.00 MiB, K (f16):   56.00 MiB, V (f16):   56.00 MiB
llama_new_context_with_model:        CPU  output buffer size =     0.58 MiB
llama_new_context_with_model:        CPU compute buffer size =   304.00 MiB
llama_new_context_with_model: graph nodes  = 986
llama_new_context_with_model: graph splits = 1
AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | RISCV_VECT = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 |
Model metadata: {'qwen2.attention.head_count': '28', 'general.name': 'qwen2-7b-instruct', 'general.architecture': 'qwen2', 'qwen2.block_count': '28', 'qwen2.context_length': '32768', 'qwen2.attention.head_count_kv': '4', 'quantize.imatrix.dataset': '../sft_2406.txt', 'qwen2.embedding_length': '3584', 'general.quantization_version': '2', 'tokenizer.ggml.bos_token_id': '151643', 'qwen2.feed_forward_length': '18944', 'tokenizer.ggml.padding_token_id': '151643', 'qwen2.rope.freq_base': '1000000.000000', 'qwen2.attention.layer_norm_rms_epsilon': '0.000001', 'tokenizer.ggml.eos_token_id': '151645', 'general.file_type': '15', 'tokenizer.ggml.model': 'gpt2', 'tokenizer.ggml.pre': 'qwen2', 'tokenizer.chat_template': "{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}", 'tokenizer.ggml.add_bos_token': 'false', 'quantize.imatrix.chunks_count': '1937', 'quantize.imatrix.file': '../Qwen2/gguf/qwen2-7b-imatrix/imatrix.dat', 'quantize.imatrix.entries_count': '196'}
Available chat formats from metadata: chat_template.default
Using gguf chat template: {% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system
You are a helpful assistant.<|im_end|>
' }}{% endif %}{{'<|im_start|>' + message['role'] + '
' + message['content'] + '<|im_end|>' + '
'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant
' }}{% endif %}
Using chat eos_token: <|im_end|>
Using chat bos_token: <|endoftext|>
[32mINFO[0m:     Started server process [[36m20172[0m]
[32mINFO[0m:     Waiting for application startup.
[32mINFO[0m:     Application startup complete.
[32mINFO[0m:     Uvicorn running on [1mhttp://0.0.0.0:8000[0m (Press CTRL+C to quit)
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 23 15:33:46 2024"""from openai import OpenAI# 注意服务端端口,因为是本地,所以不需要api_key
client = OpenAI(base_url="http://localhost:8000/v1",api_key="not-needed")# 对话历史:设定系统角色是一个只能助理,同时提交“自我介绍”问题
history = [{"role": "system", "content": "你是一个智能助理,你的回答总是正确的、有用的和内容非常精简."},{"role": "user", "content": "请用中文进行自我介绍,要求不能超过5句话,总字数不超过100个字。"},
]
print("\033[92;1m")# 首次自我介绍完毕,接下来是等代码我们的提示
while True:completion = client.chat.completions.create(model="local-model",messages=history,temperature=0.7,stream=True,)new_message = {"role": "assistant", "content": ""}for chunk in completion:if chunk.choices[0].delta.content:print(chunk.choices[0].delta.content, end="", flush=True)new_message["content"] += chunk.choices[0].delta.contenthistory.append(new_message)print("\033[91;1m")userinput = input("> ")if userinput.lower() in ["bye", "quit", "exit"]: # 我们输入bye/quit/exit等均退出客户端print("\033[0mBYE BYE!")breakhistory.append({"role": "user", "content": userinput})print("\033[92;1m")

大家好,我是一个智能助手,专注于提供准确、有用且精炼的信息。无论您需要学习、工作还是日常生活中的帮助,我都将全力支持。期待能为您带来便利和解答疑惑!
> OpenVINO怎么样?OpenVINO 是英特尔开发的一款开源软件工具包,专为加速计算机视觉和机器学习应用而设计。它提供了一套完整的编译、优化和部署框架,支持多种硬件平台,使得开发者能够高效地将模型部署到边缘设备或云端。OpenVINO 包括了优化库、模型编译器以及开发工具集,简化了从训练后的模型到实际应用的过渡过程。通过 OpenVINO,可以显著提高推理性能,支持多框架兼容性,并且提供了丰富的文档和社区支持。
> 软件开发者如何快速入门深度学习?软件开发者入门深度学习可遵循以下步骤:1. **了解基础**:首先掌握数学基础知识,特别是线性代数、微积分和概率论;理解机器学习的基本概念和算法。2. **选择工具**:熟悉主流的深度学习框架如 TensorFlow、PyTorch 或 Keras。它们提供了丰富的功能和易于使用的API。3. **实践项目**:通过实际操作解决具体问题,可以从简单任务(如MNIST手写数字识别)开始,逐步过渡到更复杂的任务或领域特定的问题。4. **理论与实践结合**:阅读相关书籍、论文,并结合在线课程进行学习。Coursera、Udacity等平台有适合不同水平的深度学习课程。5. **参与社区和项目**:加入开发者论坛、GitHub项目,或者参加开源项目贡献代码,这有助于加深理解并获取实践经验。6. **持续更新与实践**:AI领域发展迅速,定期阅读论文、关注行业动态,并通过不断的小项目来实践最新的技术。7. **了解应用场景**:深度学习在图像处理、自然语言处理等领域有广泛的应用。明确你的兴趣所在,并深入了解该领域的最新进展和应用案例。通过上述步骤系统性地学习和实践,能够帮助软件开发者快速掌握深度学习技能。
> bye
BYE BYE!

安装Ollama Web UI 精简版

Ollama Web UI Lite 是 Ollama Web UI 的简化版本,旨在提供简化的用户界面,具有最少的功能和更低的复杂性。该项目的主要重点是通过完整的 TypeScript 迁移实现更清晰的代码,采用更加模块化的架构,确保全面的测试覆盖率,并实施强大的 CI/CD 管道。

当前版本仅包含完整 Ollama Web UI 中的基本功能,例如拉取和删除模型、与一个或多个模型进行对话、聊天导入/导出等。

git clone https://github.com/ollama-webui/ollama-webui-lite

 MINGW64 /g/openai
$ git clone https://github.com/ollama-webui/ollama-webui-lite
Cloning into 'ollama-webui-lite'...
remote: Enumerating objects: 313, done.
remote: Counting objects: 100% (37/37), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 313 (delta 20), reused 15 (delta 15), pack-reused 276 (from 1)
Receiving objects: 100% (313/313), 6.86 MiB | 3.32 MiB/s, done.
Resolving deltas: 100% (113/113), done.

PS G:\openai\ollama-webui-lite> npm run dev

> ollama-webui-lite@0.0.1 dev
> vite dev --host --port 3000VITE v4.5.5  ready in 2917 ms➜  Local:   http://localhost:3000/➜  Network: http://192.168.1.2:3000/➜  press h to show help

用浏览器访问应用,选择Qwen2-7B模型

{"model":"Qwen2-7B:latest","prompt":"Generate a brief 3-5 word title for this question, excluding the term 'title.' Then, please reply with only the title: OpenVINO怎么样?","stream":false}{"model": "Qwen2-7B:latest","created_at": "2024-10-24T04:38:51.2599221Z","response": "OpenVINO评价如何?\nOpenVINO使用体验分享","done": true,"done_reason": "stop","context": [151644,872,198,31115,264,9814,220,18,12,20,3409,2265,369,419,3405,11,43778,279,4647,364,2102,3159,5005,11,4486,9851,448,1172,279,2265,25,5264,53,47975,104472,11319,151645,198,151644,77091,198,5002,53,47975,103964,100007,94432,5002,53,47975,37029,101904,93149],"total_duration": 1053661700,"load_duration": 33092900,"prompt_eval_count": 41,"prompt_eval_duration": 301770000,"eval_count": 13,"eval_duration": 717216000
}

 

const sendPromptOllama = async (model, userPrompt, parentId, _chatId) => {console.log("sendPromptOllama");let responseMessageId = uuidv4();let responseMessage = {parentId: parentId,id: responseMessageId,childrenIds: [],role: "assistant",content: "",model: model};history.messages[responseMessageId] = responseMessage;history.currentId = responseMessageId;if (parentId !== null) {history.messages[parentId].childrenIds = [...history.messages[parentId].childrenIds,responseMessageId];}await tick();window.scrollTo({ top: document.body.scrollHeight });const res = await fetch(`${$settings?.API_BASE_URL ?? OLLAMA_API_BASE_URL}/chat`, {method: "POST",headers: {"Content-Type": "text/event-stream"},body: JSON.stringify({model: model,messages: messages.map((message) => ({role: message.role,content: message.content})),options: {seed: $settings.seed ?? undefined,temperature: $settings.temperature ?? undefined,repeat_penalty: $settings.repeat_penalty ?? undefined,top_k: $settings.top_k ?? undefined,top_p: $settings.top_p ?? undefined,num_ctx: $settings.num_ctx ?? undefined,...($settings.options ?? {})},format: $settings.requestFormat ?? undefined})}).catch((err) => {console.log(err);return null;});if (res && res.ok) {const reader = res.body.pipeThrough(new TextDecoderStream()).pipeThrough(splitStream("\n")).getReader();while (true) {const { value, done } = await reader.read();if (done || stopResponseFlag || _chatId !== $chatId) {responseMessage.done = true;messages = messages;break;}try {let lines = value.split("\n");for (const line of lines) {if (line !== "") {console.log(line);let data = JSON.parse(line);if ("detail" in data) {throw data;}if (data.done == false) {if (responseMessage.content == "" && data.message.content == "\n") {continue;} else {responseMessage.content += data.message.content;messages = messages;}} else {responseMessage.done = true;responseMessage.context = data.context ?? null;responseMessage.info = {total_duration: data.total_duration,load_duration: data.load_duration,sample_count: data.sample_count,sample_duration: data.sample_duration,prompt_eval_count: data.prompt_eval_count,prompt_eval_duration: data.prompt_eval_duration,eval_count: data.eval_count,eval_duration: data.eval_duration};messages = messages;if ($settings.responseAutoCopy) {copyToClipboard(responseMessage.content);}}}}} catch (error) {console.log(error);if ("detail" in error) {toast.error(error.detail);}break;}if (autoScroll) {window.scrollTo({ top: document.body.scrollHeight });}await $db.updateChatById(_chatId, {title: title === "" ? "New Chat" : title,models: selectedModels,options: {seed: $settings.seed ?? undefined,temperature: $settings.temperature ?? undefined,repeat_penalty: $settings.repeat_penalty ?? undefined,top_k: $settings.top_k ?? undefined,top_p: $settings.top_p ?? undefined,num_ctx: $settings.num_ctx ?? undefined,...($settings.options ?? {})},messages: messages,history: history});}} else {if (res !== null) {const error = await res.json();console.log(error);if ("detail" in error) {toast.error(error.detail);responseMessage.content = error.detail;} else {toast.error(error.error);responseMessage.content = error.error;}} else {toast.error(`Uh-oh! There was an issue connecting to Ollama.`);responseMessage.content = `Uh-oh! There was an issue connecting to Ollama.`;}responseMessage.error = true;responseMessage.content = `Uh-oh! There was an issue connecting to Ollama.`;responseMessage.done = true;messages = messages;}stopResponseFlag = false;await tick();if (autoScroll) {window.scrollTo({ top: document.body.scrollHeight });}if (messages.length == 2 && messages.at(1).content !== "") {window.history.replaceState(history.state, "", `/c/${_chatId}`);await generateChatTitle(_chatId, userPrompt);}};

Ollama Qwen2-7B:latest
对于软件开发者来说,想要快速入门深度学习,可以遵循以下几个步骤:1. 了解基本概念首先需要理解机器学习的基础理论,特别是监督学习、无监督学习和强化学习的概念。然后深入研究深度学习的核心思想——神经网络模型,包括前向传播、反向传播等机制。2. 选择适合的学习资源在线课程: Coursera、Udacity、edX等平台提供了大量深度学习的入门和进阶课程。书籍: 建议阅读《深度学习》(Ian Goodfellow, Yoshua Bengio & Aaron Courville)、《Python深度学习》(Francois Chollet)等经典作品。博客/论坛: TensorFlow、PyTorch官方文档和社区,Stack Overflow,Medium上的技术博主分享的文章。3. 实践编程实际动手是掌握任何技术的关键。以下是一个简单的实践步骤:选择深度学习框架:建议初学者从TensorFlow或PyTorch开始,这两个框架都是功能强大且广泛应用的。尝试简单的项目: 开始可以从“Hello World”级别的项目做起,例如用MNIST数据集实现一个手写数字识别模型。网上有很多现成的教学代码和教程可以帮助你快速上手。参与开源项目: GitHub上有许多深度学习相关的开源项目,通过为这些项目贡献代码或研究新功能,可以加深对深度学习的理解。4. 关注行业趋势深度学习是一个快速发展且不断更新的领域。了解最新的研究成果、技术趋势和应用实例对于提升技能至关重要。可以通过阅读学术论文、参加研讨会和讲座等方式来保持知识的时效性。5. 建立项目实践将所学应用于实际问题上是检验学习成果的有效方法。可以从解决现实生活中的问题开始,如图像分类、自然语言处理任务等,逐步增加项目的复杂度和挑战性。6. 加入社区深入深度学习的社区可以让你获得更多的知识和技术帮助。可以参加线上或线下的深度学习研讨会、交流会以及参与相关论坛讨论。通过上述步骤,软件开发者将能够系统地学习并实践深度学习,从而在这一领域建立坚实的基础和技能。

参见:

intel openvino 2024-2

Qwen2-7B-Instruct-GGUF 魔搭社区

OpenVINO_DLWorkbench_JackHsu.pdf

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

短剧AI突围战,百度跑偏了

“ 百度短剧的Agent对话功能并不属于颠覆性创新&#xff0c;只是新插件&#xff0c;对短剧行业市场格局影响不大&#xff0c;最多只能算用户痒点。 ” 转载&#xff1a;科技新知 原创 作者丨晓伊 编辑丨蕨影 你是否有过这样的体验&#xff1f; 刷短剧时&#xff0c;因剧情曲…

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架&#xff0c;它允许用户通过一个或多个大型语言模型&#xff08;LLM&#xff09;来处理数据。这个框架不仅提供了一个强大的代理&#xff0c;能够执行网络搜索和运行Python代码&#xff0c;还提供了一套工具来抓取网页数据&#xff0c;并将其重新格式化…

若依前后分离版集成积木报表

1.项目后端结构如下 2.引入JimuReport依赖&#xff0c;在ruoyi-framework的.pom文件中引入积木报表最新依赖,我使用的是1.6.0&#xff0c;可通过 积木报表官网 - JimuReport报表,免费的企业级Web报表工具(可视化报表_低代码报表_在线大屏设计器) 查询最新版本号 <dependenc…

【c++差分数组】P9583涂色

本文涉及知识点 C差分数组 P9583涂色 n行m列方格纸&#xff0c;初始是白色(0层)。共涂色q次&#xff0c;每次选择一行或一列&#xff0c;将这行或列涂一层颜色。如果某次涂色后&#xff0c;某个单格是k层颜色&#xff0c;则涂为白色(0层&#xff09;。求最后被涂色的单格数量…

【Golang】Gin框架中如何定义路由

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

2024 年最热门的人工智能趋势

文章目录 1. 生成式人工智能&#xff08;Generative AI&#xff09;的全面普及2. 多模态 AI 的崛起3. AI 与自动化的深度融合4. 隐私保护与安全 AI5. AI 驱动的个性化体验6. 低代码与无代码 AI 开发工具7. AI 与边缘计算的结合总结 博主介绍&#xff1a;全网粉丝10w、CSDN合伙人…

vuetify页面布局

效果图&#xff1a; 这个布局用到了以下组件&#xff1a; 1.v-navigation-drawer侧边栏 rail&#xff1a;用来控制侧边栏折叠和展开状态&#xff0c;等于false&#xff0c;是展开状态&#xff0c;否则折叠状态。permanent&#xff1a;等于true的时候&#xff0c;无论屏幕大小…

vue elementui el-table实现增加行,行内编辑修改

需求&#xff1a; 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;可进行行编辑。 效果图&#xff1a; <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…

鼠标移入盒子,盒子跟随鼠标移动

demo效果&#xff1a; 鼠标移入盒子&#xff0c;按下鼠标,开启移动跟随移动模式,再次按下关闭移动模式 涉及主要属性 在元素上单击鼠标按钮时输出鼠标指针的坐标&#xff1a; var x event.pageX; // 获取水平坐标 var y event.pageY; // 获取垂直坐标元素offsetL…

十、pico+Unity交互开发教程——射线抓取与更多交互功能

一、回顾与引入 回顾上一篇直接抓取的教程&#xff0c;VR交互一般需要可交互的对象&#xff08;Interactable&#xff09;和发起交互的对象&#xff08;Interactor&#xff09;。直接抓取和射线抓取的可交互对象无区别&#xff0c;可参考上一篇教程设置组件。两者区别在于发起…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理的高效解决方案

在当今的数字化安防时代&#xff0c;视频监控系统的需求日益复杂和多样化。为了满足不同场景下的监控需求&#xff0c;一种高效、灵活且兼容性强的安防视频监控平台——NVR批量管理软件/平台EasyNVR应运而生。本篇探讨这一融合所带来的创新与发展。 一、NVR监测软件/设备EasyNV…

J.D商品详情,一“网”打尽 —— PHP爬虫API数据获取全攻略

在当今数字化时代&#xff0c;数据已成为最宝贵的资源之一。对于电商平台而言&#xff0c;实时掌握商品的详细信息&#xff0c;如同拥有了解锁市场动态的金钥匙。J.D&#xff0c;作为中国领先的电商平台&#xff0c;其商品详情数据的获取&#xff0c;更是电商领域的一大热点。本…

麒麟V10、UOS系统实现在线合并多个Word文件

不管是将多个Word文件插入到Word模板指定位置&#xff0c;生成一个合并文档&#xff0c;还是将多个Word文档插入到一个空白的Word文件中&#xff0c;首尾连接成一篇文档&#xff0c;都需要用到PageOffice提供的数据区域插入Word文档功能。 在实际项目开发中&#xff0c;以下场景…

【前端】如何制作一个自己的网页(18)定义列表

三、定义列表&#xff08;Definition List&#xff09; 除了有序和无序列表&#xff0c;还有一种HTML列表类型&#xff0c;被称为定义列表。 应用场景&#xff1a;对某个术语或内容进行解释和描述&#xff0c;所以由标题和描述两部分组成&#xff0c;描述是对标题的解释和说明…

docker harbor

文章目录 一&#xff0c;搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二&#xff0c;什么是ho…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间&#xff08;建议设置过期时间&#xff0c;毕竟登录生产服务器并不是每个人都有权限登录的&#xff01;&#xff01;&#xff01;&#xff09;。如果变动只能通过登录生产服务器、手动修改… 于…

你还在使用存储过程吗?

上周&#xff0c;reddit 网 r/dotnet 区的网友 technolang 发帖&#xff1a;「你还在使用存储过程吗&#xff1f;」 我很好奇为什么 2024 年了我们还在使用存储过程。难道网络应用中没有一个业务层来处理所有事情吗&#xff1f;依赖 DBA 并在数据库层创建依赖关系似乎没有必要。…

【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据)

【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff&#xff08;geogrid&#xff0c;WPS所需数据&#xff09; 数据准备&#xff1a;以叶面积指数LAI为例QGis实操&#xff1a;基于GIS4WRF插件将geotiff数据转为tiff警告&#xff1a;GIS4WRF: Input layer had an unexpected …

ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化等更新

ONLYOFFICE 在线编辑器最新版本已经发布&#xff0c;其中包含30多个新功能和500多个错误修复。阅读本文了解所有更新。 关于 ONLYOFFICE 文档 ONLYOFFICE 是一个开源项目&#xff0c;专注于高级和安全的文档处理。坐拥全球超过 1500 万用户&#xff0c;ONLYOFFICE 是在线办公领…

2024年 Spring Boot 系列学习宝典!!!!!

欢迎来到Spring Boot的世界&#xff01;本系列文章旨在为开发者提供从入门到精通的全面指导&#xff0c;无论你是Spring Boot新手还是有经验的开发者&#xff0c;都能在这里找到有价值的内容。让我们一起踏上这段旅程&#xff0c;探索如何使用Spring Boot构建高效、可扩展的应用…