Skip to content

ciictec/Zhigong1.6B

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

👨‍💻 Github • 🤗 Hugging Face

项目介绍

Zhigong-1.6B是工业领域轻量化开源大模型,采用3.2T的高质量语料训练。

  • 该底座产品面向边缘计算和智能终端,1.6B参数实现了模型参数的轻量级化。该底座产品,提供高度灵活的预训练框架,可以将能力扩展至工业设备、智能设备和工业产品,为工业应用场景提供更高效的计算性能。
  • 该底座产品实现了对汉语、英语、法语、俄语、西班牙语、柬埔寨语、捷克语、匈牙利语、印度尼西亚语、哈萨克语、老挝语、蒙古语、波兰语、塞尔维亚语、土耳其语、越南语、日语和韩语等18种语言文字语言增强技术。

更新信息

  • 2023.12.28 智工开源1.6B工业大模型已开放。地址:huggingface

目录

下载地址

模型下载

模型 下载地址
Zhigong-1.6B-Base 🤗Zhigong-1.6B-Base
Zhigong-1.6B-Chat 🤗Zhigong-1.6B-Chat

模型中间存档下载

我们后续将逐步开源Zhigong-1.6B-Base模型在预训练的过程中的模型存档供社区使用。

模型介绍

训练数据

我们针对工业场景重新构建了数据筛选流程,Zhigong-1.6B-Base模型是在清洗后的3.2T高质量中、英、代码数据上进行训练,大幅度提升了图书、论文、领域数据比例。

类目 百分比
英文 网页数据 36.20%
书籍数据 8.70%
工业领域数据 2.60%
学术论文 2.50%
百科 0.50%
其他 1.90%
中文 网页数据 25.20%
书籍数据 6.50%
工业领域数据 2.50%
百科全书 0.80%
其他 1.60%
其他语言 百科 2.40%
图书 2.60%
代码 Github 6.00%

模型结构

整体模型基于标准的 Transformer 结构,我们采用了和 LLaMA-2相同的模型设计。层数为24层,Hidden Dim 为2048,训练序列长度为2048。

模型结构 Zhigong-1.6B
词表大小 103368
Hidden Dim 2048
Intermediate Size 5632
Head Dim 128
Attention头数 16
层数 24
训练序列长度 2048
位置编码 RoPE

分词器

我们使用Byte-Pair Encoding(BPE)对数据进行分词。Zhigong-1.6B聚焦“一带一路”国际合作高峰论坛,支持汉语、英语、法语、俄语、西班牙语、柬埔寨语、捷克语、匈牙利语、印度尼西亚语、哈萨克语、老挝语、蒙古语、波兰语、塞尔维亚语、土耳其语、越南语、日语和韩语。并且针对除英语外的“一带一路”国家语言额外引入1万个词元。

模型评估

MMLU评估

Model MMLU
Gpt-neo-1.3B 24.51
Opt-1.3b 24.88
TinyLlama-1.1B-intermediate-step-1195k-token-2.5T 25.92
Pythia-1b 26.21
Bloom-3b 26.3
Bloom-1b1 26.6
Bloomz-1b1 27.05
Bloom-1b7 27.59
Zhigong-1.6B 28.01

快速开始

我们将模型参数、配置文件、tokenizer等在Hugging Face上进行了开源。

依赖安装

  • Python 3.8及以上版本
  • Pytorch 1.13及以上版本
  • CUDA建议使用11.4以上版本

运行下面的脚本进行Python依赖安装。

pip install -r requirements.txt 

Base模型推理

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
import torch

model_path = "ciictec/Zhigong-1.6B-Base"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, use_fast=False, add_bos_token=False)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval()

inputs = tokenizer('黄河发源于青藏高原', return_tensors='pt').to(model.device)
response = model.generate(inputs.input_ids, max_length=128)
print(tokenizer.decode(response.cpu()[0], skip_special_tokens=True))
"""
黄河发源于青藏高原的世界屋脊,是中国的“第二条大河”。它流经9个省、自治区、直辖市,流域面积约960万平方千米,占全国面积的71%,为中国的“水塔”。
它也是世界上水量最大、流域面积最广的河流,也是世界上水资源最丰富的河流之一。
它也是中国的“生命之河”,被誉为“中华水塔”。
"""

Chat模型推理

import os
import re
from typing import Tuple, List, Dict
import torch
from loguru import logger
from transformers import AutoTokenizer, LlamaForCausalLM

model_name = "Assistant"
human_prompt = "<|Human|>"
assistant_prompt = f"<|{model_name}|>"

class ModelChat(LlamaForCausalLM):
    def __init__(self, config, tokenizer):
        super().__init__(config)
        self.tokenizer = tokenizer
        self.tokenizer.add_special_tokens({"additional_special_tokens": [human_prompt, assistant_prompt]})
        self.history = []

    def process_response(self, response):
        response = response.strip()
        punkts = [
            [",", ","],
            ["!", "!"],
            [":", ":"],
            [";", ";"],
            ["\?", "?"],
        ]
        for item in punkts:
            response = re.sub(r"([\u4e00-\u9fff])%s" % item[0], r"\1%s" % item[1], response)
            response = re.sub(r"%s([\u4e00-\u9fff])" % item[0], r"%s\1" % item[1], response)
        response = response.replace(self.tokenizer.eos_token, "").replace(self.tokenizer.bos_token, "").strip()
        return response

    @torch.no_grad()
    def chat(self, query: str, history: List[Tuple[str, str]] = None, max_length: int = 2048, num_beams=1,
             do_sample=True, top_p=0.7, top_k=50, temperature=0.8, repetition_penalty=1.0, **kwargs):
        if history is None:
            history = []
        gen_kwargs = {"max_length": max_length, "num_beams": num_beams, "do_sample": do_sample, "top_p": top_p,
                      "top_k": top_k, "temperature": temperature, "repetition_penalty": repetition_penalty,
                      "bos_token_id": self.tokenizer.bos_token_id, "eos_token_id": self.tokenizer.eos_token_id, **kwargs}
        history_prompt = ""
        for turn in history:
            history_prompt += turn[0] + turn[1]
        wrap_query = human_prompt + str(query)
        prompt = history_prompt + wrap_query + assistant_prompt 
        inputs = self.tokenizer([prompt], return_tensors="pt")
        inputs = inputs.to(self.device)
        outputs = self.generate(**inputs, **gen_kwargs)
        outputs = outputs.tolist()[0][len(inputs["input_ids"][0]):]
        response = self.tokenizer.decode(outputs)
        response = self.process_response(response)
        history.append([wrap_query, assistant_prompt + response + self.tokenizer.eos_token])
        
        return response, history

if __name__ == '__main__':
    model_path = "ciictec/Zhigong-1.6B-Chat"
    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, use_fast=False, add_bos_token=False)
    model = ModelChat.from_pretrained(model_path, tokenizer=tokenizer, device_map="auto").half()

    q = "<<桃花源记>>里陶渊明表达了什么样的思想"
    response, history = model.chat(query=q, max_length=2048,history=None)
    print(response)

    """生成结果:
    逃避现实。陶渊明在《桃花源记》中,以“桃花源”为象征,描绘了一个与现实社会截然不同的理想社会,在这个社会中,人们过着快乐、安宁的生活,与自然和谐相处,人们不关心政治,不追求名利,过着与世无争的生活。陶渊明在这里所表达的思想,是逃避现实、追求宁静的思想。
    """

模型样例展示

我们构建了多种应用场景,使用Zhigong-1.6B-Chat模型进行了测试。

工业问答

用户:
什么是PLC?
Zhigong-1.6B-Chat:
PLC(Programmable Logic Controller)是一种工业控制系统,它将计算机与工业控制系统相结合,实现对工业设备的控制和操作。它通过编程实现对设备的控制,实现对设备的智能化控制。

用户:
什么是工业自动化的传统组件?
Zhigong-1.6B-Chat:
工业自动化传统组件是指工业自动化系统的基本组成部分,包括传感器、执行器、控制系统、计算机等。这些组件通常由工业制造商或第三方供应商提供,以确保工业自动化系统的稳定性和可靠性。

用户:
什么是工业物联网(IIoT)?
Zhigong-1.6B-Chat:
工业物联网(IIoT)是一种将工业设备、传感器、软件和数据等技术连接起来的网络,以实现工业设备的远程监控、数据采集和智能控制。IIoT可以帮助企业提高生产效率、降低成本、提高产品质量和服务水平,并实现设备的智能维护和故障预测。

用户:
工业中的能源管理是什么?
Zhigong-1.6B-Chat:
工业中的能源管理是指在工业生产过程中,对能源的使用、管理、分配和节约等方面进行的规划、设计、实施和监控等一系列活动。它涉及到生产过程中的各个环节,包括生产设备、生产工艺、生产管理、能源管理、能源利用效率等。

翻译

用户:
请将以下句子翻译成中文:ハワイのweather是very的好,우리 함께 go shopping和ピクニく吧!

Zhigong-1.6B-Chat:
夏威夷的天气很好,我们一起去购物吧!

用户:
"Вечер тихой песнею над рекой плывёт."是什么意思?

Zhigong-1.6B-Chat:
晚风轻拂,在河流的另一边,我听到那轻快的歌声。

代码

用户:
写一段C++代码 完成冒泡排序

Zhigong-1.6B-Chat:
#include <iostream>
#include <vector>

void bubbleSort(std::vector<int>& arr) {
    for (int i = 0; i < arr.size(); i++) {
        for (int j = 0; j < arr.size() - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                std::swap(arr[j], arr[j + 1]);
            }
        }
    }
}

int main() {
    std::vector<int> arr = {10, 7, 8, 9, 1, 5, 6, 4, 3, 2};
    bubbleSort(arr);
    std::cout << "Sorted array: " << std::endl;
    std::cout << arr << std::endl;
    return 0;
}

数学

用户:
如果3x+1=10,那么x等于多少?

Zhigong-1.6B-Chat:
如果3x+1=10,那么我们可以通过将等式两边都减去1来解出x的值。
3x + 1 - 1 = 10 - 1
3x = 9
现在我们可以解出x的值:
x = 9 / 3
x = 3
所以,x等于3

用户:
序列1,4,9,16的后一个数是什么?

Zhigong-1.6B-Chat:
序列1,4,9,16的后一个数是25。

诗词文学

用户:
“但愿人长久,千里共婵娟”,其中婵娟指的是什么?

Zhigong-1.6B-Chat:
婵娟指的是月亮。

用户:
”不是东风压了西风,就是西风压了东风”一语出自《红楼梦》中何人之口?

Zhigong-1.6B-Chat:
林黛玉。不是东风压了西风,就是西风压了东风。这句出自《红楼梦》中林黛玉的口中。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages