色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

樹莓派跑LLM難上手?也許你可以試試Intel哪吒開發板

英特爾物聯網 ? 來源:英特爾物聯網 ? 2024-12-02 09:43 ? 次閱讀

大型語言模型(LLM)通過其卓越的文本理解與生成能力,為機器智能帶來了革命性的進步。然而,這些模型的運行通常需要消耗大量的計算資源,因此它們主要部署在性能強大的服務器上。

隨著技術的發展和邊緣計算的興起,現在有潛力在更小巧、便攜的設備上部署這些模型。例如,Raspberry Pi 樹莓派Intel 哪吒開發套件等單片機。盡管體積小巧,但它們具備足夠的能力運行某些精簡版本的模型。本文就兩款單片機上運行LLM做一個對比,先嘗試在Raspberry Pi 4B運行大模型,然后將該方案在Intel哪吒開發板重建。

1

Raspberry Pi4上運行大模型Qwen2 0.5B

一般情況下,模型需要兩倍內存大小才能正常運行。因此,本方案使用的8GB的Raspberry Pi4 4B來做推理。

1.1環境部署

#部署虛擬環境 
sudo apt update && sudo apt install git 
mkdir my_project 
cd my_project
python -m venv env source env/bin/activate 
#下載依賴庫 
python3 -m pip install torch numpy sentencepiece 
sudo apt install g++ build-essential 
#下載llama.cpp代碼庫 
git clone https://github.com/ggerganov/llama.cpp 
#編譯環境 
cd llama.cpp 
make

1.2 模型下載

樹莓派4b的8GB RAM,即使樹莓派5,都不太適合做模型的量化。只能在PC機上做好量化后,再把量化后的模型文件拷貝到樹莓派上部署。具體方式是使用LLaMA.cpp中的convert-hf-to-gguf.py將原模型轉化成GGUF格式。

鑒于Raspberry Pi只有CPU,我們需要優先考慮可以在CPU上運行的模型。本次選擇的大模型是Qwen2 0.5B。

Qwen2 0.5B是阿里云開源的新一代大語言模型,模型規模為0.49B參數,支持最長達32K tokens的上下文長度,在多個評測基準上表現優異,超越了Meta的Llama-3-70B。

這里我們直接從魔搭社區魔搭社區下載已經量化過的GGUF模型文件。

#模型下載 
wget https://www.modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-GGUF/resolve/master/qwen2-0_5b-instruct-q5_k_m.gguf

1.3 模型運行

大模型推理引擎使用的是llama.cpp,實現模型推理對話。

./llama-cli -m /home/pi/qwen2-0_5b-instruct-q5_k_m.gguf -n 512 -co -i -if -f ../../prompts/chat-with-qwen.txt --in-prefix "<|im_start|>user
" --in-suffix "<|im_end|>
<|im_start|>assistant
" -ngl 24 -fa

1.4 總結

經過一番折騰,配置環境和編譯,耗去了幾天時間,樹莓派終于成功運行大模型了。雖然可以,但比較吃力??戳司W上其他人的嘗試,即使換用具有更強大處理能力的樹莓派5,運行作為資源有限設備設計的Phi-2-Q4(27億參數),由于沒有GPU支撐,所以速度也只有5.13 tokens/s。

所以說,樹莓派5在處理速度上相較于4B有了顯著提升,但在處理大型LLM時仍受到諸多限制??偨Y樹莓派跑大模型的痛點:一是它無法做模型量化,要么在本地PC機上做好量化再拷貝過來,要么直接下載使用GGUF模型文件。二是它只有CPU,計算能力的提升空間基本被鎖死了。如果要在樹莓派上跑模型,只能選用內存占用較小且僅在 CPU 上運行的模型。

看網上有高人設想了一些解決方案,比如:

將樹莓派上的小GPU用起來。樹莓派5有個VideoCore GPU,支持Vulkan編程,而llama.cpp也有Vulkan后端,理論上是有可能的。但運行上有些問題,包括死鎖、輸出亂碼等,推測可能和shader有關,還需要進一步研究。

用類似T-MAC的方法,加速樹莓派CPU的推理。T-MAC提出用look-up table (LUT) 代替計算,對于低比特量化的模型會很有幫助。例如4-bit相乘,只需要一個16x16的表就能預存所有可能的結果,把乘法變成了查表。

采用新的更高效的模型架構,例如RWKV?
但這些方法都還只是停留在理論設想階段,沒有落地實踐,那為什么不直接試下Intel 哪吒呢?

2

Intel哪吒開發套件上運行大模型Qwen 2.5

Intel 哪吒開發套件搭載了英特爾N97處理器(3.6GHz),配備64GB eMMC存儲和8GB LPDDR5內存。英特爾N97處理器屬于 Intel Alder Lake-N 系列,采用僅 E-Core 的設計,專為輕量級辦公、教育設備和超低功耗筆記本電腦設計,成本和功耗更低,更適合嵌入式設備。

關鍵點來了!Intel 哪吒最大的優勢就是自帶集成顯卡,Intel UHD Graphics,我們可以在iGPU上使用OpenVINO來運行大模型。

說干就干!

2.1安裝OpenVINO配置環境

2.1.1 安裝OpenVINO

從OpenVINO官網下載linux版本的壓縮包,再解壓,安裝依賴,配置環境變量。

3199f6c8-ae3a-11ef-93f3-92fbcf53809c.jpg

#解壓 
tar -zxvf l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64.tgz 
#安裝依賴包 
cd l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64/ 
sudo -E ./install_dependencies/install_openvino_dependencies.sh 
#配置環境變量 
source ./setupvars.sh

2.1.2安裝OpenCL runtime packages

既然我們要充分發揮Intel 哪吒的集成顯卡優勢,就還要另外安裝OpenCL runtime packages來把模型部署到iGPU上。具體參考官方文檔,Configurations for Intel Processor Graphics (GPU) with OpenVINO — OpenVINO documentation參考網上經驗,我使用deb包的方式進行安裝,從https://github.com/intel/compute-runtime/releases/tag/24.35.30872.22先下載11個deb包到開發板上,然后再dpkg安裝。

#Create temporary directory
mkdir neo
#Download all *.deb packages
cd neo
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.20/intel-igc-core_1.0.17537.20_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.20/intel-igc-opencl_1.0.17537.20_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu-dbgsym_1.3.30872.22_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu-legacy1-dbgsym_1.3.30872.22_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu-legacy1_1.3.30872.22_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu_1.3.30872.22_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd-dbgsym_24.35.30872.22_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd-legacy1-dbgsym_24.35.30872.22_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd-legacy1_24.35.30872.22_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd_24.35.30872.22_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/libigdgmm12_22.5.0_amd64.deb
 
#Verify sha256 sums for packages
wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/ww35.sum
sha256sum -c ww35.sum
 
#install required dependencies
apt install ocl-icd-libopencl1
 
#Install all packages as root
sudo dpkg -i *.deb

31a37928-ae3a-11ef-93f3-92fbcf53809c.jpg

2.2模型下載和轉換量化

2.2.1 模型下載

本次采用的大模型是Qwen 2.5-0.5B。Qwen2.5是阿里通義團隊近期最新發布的文本生成系列模型,基于更富的語料數據集訓練,相較于 Qwen2,Qwen2.5 獲得了顯著更多的知識(MMLU:85+),并在編程能力(HumanEval 85+)和數學能力(MATH 80+)方面有了大幅提升。此外,新模型在指令執行、生成長文本(超過 8K 標記)、理解結構化數據(例如表格)以及生成結構化輸出特別是 JSON 方面取得了顯著改進。Qwen2.5 模型總體上對各種 system prompt 更具適應性,增強了角色扮演實現和聊天機器人的條件設置功能。Qwen2.5 語言模型支持高達 128K tokens,并能生成最多 8K tokens 的內容。本次使用的是指令調優的0.5B模型,其特點如下:

類型:因果語言模型
訓練階段:預訓練與后訓練
架構:使用RoPE、SwiGLU、RMSNorm、注意力QKV偏置和綁定詞嵌入的transformers
參數數量:0.49億
非嵌入參數數量:0.36億
層數:24
注意力頭數(GQA):查詢14個,鍵值對2個
上下文長度:完整32,768token,生成最多8192token


下載模型首選魔搭社區,直接下載到Intel哪吒開發板上。

#安裝lfs
git lfs install
#下載模型
git clone https://www.modelscope.cn/qwen/Qwen2.5-0.5B-Instruct.git

2.2.2模型轉換量化

在部署模型之前,我們首先需要將原始的 PyTorch 模型轉換為 OpenVINO的 IR 靜態圖格式,并對其進行壓縮,以實現更輕量化的部署和最佳的性能表現。

(1)環境配置

新建一個虛擬環境,安裝依賴。

python3 -m venv openvino_env
 
source openvino_env/bin/activate
 
python3 -m pip install --upgrade pip
 
pip install wheel setuptools
 
pip install -r requirements.txt

(2)轉換和量化

通過 Optimum 提供的命令行工具 optimum-cli,我們可以一鍵完成模型的格式轉換和權重量化任務。

optimum-cli export openvino --model './local_dir' --task text-generation-with-past --weight-format int4 --group-size 128 --ratio 0.8  Qwen2.5-0.5B-Instruct-int4-ov

我們也可以根據模型的輸出結果,調整其中的量化參數,包括:

--weight-format:量化精度,可以選擇fp32,fp16,int8,int4,int4_sym_g128,int4_asym_g128,int4_sym_g64,int4_asym_g64
--group-size:權重里共享量化參數的通道數量
--ratio:int4/int8 權重比例,默認為1.0,0.6表示60%的權重以 int4 表,40%以 int8 表示
--sym:是否開啟對稱量化

31bacb0a-ae3a-11ef-93f3-92fbcf53809c.jpg

經過一個稍微漫長的等待,終于,轉換成功!

31ccd174-ae3a-11ef-93f3-92fbcf53809c.jpg

2.2.3 模型部署

OpenVINO 目前提供兩種針對大語言模型的部署方案,一種是基于 Python 接口的 Optimum-intel 工具來進行部署,可以直接用 Transformers 庫的接口來部署模型;另一種是GenAI API 方式,它同時支持 Python 和 C++ 兩種編程語言,安裝容量不到200MB,提供更極致的性能和輕量化的部署方式,更適合邊緣設備上部署大模型。

本文采用的是后者,即GenAI API 方式。GenAI API 提供了 chat 模式的構建方法,通過聲明 pipe.start_chat()以及pipe.finish_chat(),多輪聊天中的歷史數據將被以 kvcache 的形態,在內存中進行管理,從而提升運行效率。

1.創建一個python文件。命名為chat_genai.py

import argparse
import openvino_genai




def streamer(subword):
    print(subword, end='', flush=True)
    return False


if __name__ == "__main__":
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument('-h',
                        '--help',
                        action='help',
                        help='Show this help message and exit.')
    parser.add_argument('-m',
                        '--model_path',
                        required=True,
                        type=str,
                        help='Required. model path')
    parser.add_argument('-l',
                        '--max_sequence_length',
                        default=256,
                        required=False,
                        type=int,
                        help='Required. maximun length of output')
    parser.add_argument('-d',
                        '--device',
                        default='CPU',
                        required=False,
                        type=str,
                        help='Required. device for inference')
    args = parser.parse_args()
    pipe = openvino_genai.LLMPipeline(args.model_path, args.device)


    config = openvino_genai.GenerationConfig()
    config.max_new_tokens = args.max_sequence_length


    pipe.start_chat()
    while True:
        try:
            prompt = input('question:
')
        except EOFError:
            break
        pipe.generate(prompt, config, streamer)
        print('
----------')
    pipe.finish_chat()

2.運行流式聊天機器人

python3 chat_genai.py --model_path {your_path}/Qwen2.5-0.5B-Instruct-ov --max_sequence_length 4096 --device GPU

--model_path - OpenVINO IR 模型所在目錄的路徑。

--max_sequence_length - 輸出標記的最大大小。

--device - 運行推理的設備。例如:"CPU","GPU"。

我們來問它一個簡單的問題吧,讓它自我介紹一下,看看它能不能答出來。

31e96456-ae3a-11ef-93f3-92fbcf53809c.jpg

可以,它對自己有個清晰的認識,阿里巴巴開發的大語言人工智能模型。

3

Intel 哪吒開發套件上運行大模型Phi-3.5-mini

還不死心,繼續上難度,再換一個尺寸更大的模型,看看Intel哪吒是否hold住?

這次我們選用的是Phi-3.5-mini,它是微軟推出的新一代 AI 模型系列中的輕量級模型,專為資源受限的環境設計,特別適合在資源受限的環境中進行復雜的語言處理任務。該模型具有以下特點:

(1)模型參數和結構:

Phi-3.5-mini 擁有38億參數,是一個密集的僅解碼器Transformer模型,使用與Phi-3 Mini相同的分詞器。

該模型基于Phi-3的數據集構建,包括合成數據和經過篩選的公開網站數據,重點關注高質量、推理密集的數據。

(2)應用和性能:

Phi-3.5-mini 特別適合在嵌入式系統和移動應用中進行快速文本處理和代碼生成。

該模型在基準測試中的表現超越了GPT4o、Llama 3.1、Gemini Flash等同類模型,顯示出其強大的性能。

(3)設計目標和適用場景:

針對基礎快速推理任務設計,適合在內存和算力受限的環境中運行,支持128k上下文長度。

該模型在處理長達128K個token的長上下文方面表現出色,這使其在多種語言處理任務中都非常有效。

(4)技術優勢:

經過嚴格的增強過程,包括監督微調和直接首選項優化,以確保精確地遵循指令和實施可靠的安全措施。

支持多語言處理和多輪對話能力,優化了處理高質量、推理密集數據的能力。

3.1下載模型

這次我們偷懶一下,直接下載已經轉換好的IR文件到Intel哪吒開發板上。

huggingface-cli download --resume-download OpenVINO/Phi-3-mini-4k-instruct-int4-ov --local-dir Phi-3-mini-4k-instruct-int4-ov

參數規模3.8B的Phi-3.5-mini,轉換成IR格式后,模型大小為2.5G

31f2c2bc-ae3a-11ef-93f3-92fbcf53809c.jpg

3.2運行流式聊天機器人

繼續采用GenAI API 方式,用iGPU推理。

python3 chat_genai.py --model_path {your_path}/Phi-3-mini-4k-instruct-int4-ov --max_sequence_length 4096 --device GPU

這次問它一個難一點的問題,比較一下python和rust兩種編程語言的優劣。

31f6f4d6-ae3a-11ef-93f3-92fbcf53809c.jpg

Phi-3.5模型真的名不虛傳!簡直人生開掛了,輸出速度目測每秒10個token,整整持續輸出了二十多分鐘,共2903字,算上標點符合16285個。

32009310-ae3a-11ef-93f3-92fbcf53809c.png

令人難以想象這是在一個單片機上跑大模型的效果,要么是Phi-3.5模型,要么是Intel 哪吒厲害,要么是微軟和英特爾聯手特別厲害!

4

總結與鳴謝

在Intel哪吒開發套件上,配合OpenVINO,可以非??焖俦憬莸碾x線部署大模型,特別是一些SLM模型,非常適合做智能硬件的開發,很好地賦能創客基于成熟硬件,打造端云協同的AI應用?;蛘咧匦露x全新硬件,開發軟硬件一體的AI產品

最后,再次感謝Intel組織的這次2024 Intel“走近開發者”互動活動讓我有機會能試用到哪吒開發套件,也感謝OpenVINO的實戰workshop,給我們這么好用的大模型工具。

參考文檔:

1、實戰精選| 5分鐘利用OpenVINO部署Qwen2.5

https://community.modelscope.cn/66f10c6b2db35d1195eed3c8.html

2、開發者實戰丨如何利用 OpenVINO 部署 Phi-3.5 全家桶

https://mp.weixin.qq.com/s/yROq_Zu3G1a5x8eV7TUmDA

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • intel
    +關注

    關注

    19

    文章

    3482

    瀏覽量

    185918
  • 開發板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
  • 樹莓派
    +關注

    關注

    116

    文章

    1706

    瀏覽量

    105607

原文標題:開發者實戰|樹莓派跑LLM難上手?也許你可以試試Intel哪吒開發板

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    微軟的樹莓intel針對樹莓的Atom策略的開始。

    Visual Studio、Windows 驅動程序工具包 (WDK)、WDK Test Pack和Windows 調試工具即可進行Windows兼容硬件開發板開發。與采用Linux系統的樹莓
    發表于 09-03 15:07

    小身材大智慧,樹莓作品集錦,總有一款適合

    `樹莓自問世以來,受眾多計算機發燒友和創客的追捧,曾經一“求。別看其外表“嬌小”,內“心”卻很強大,視頻、音頻等功能通通皆有,可謂是“麻雀雖小,五臟俱全”。這么一塊強大的
    發表于 09-26 15:58

    玩轉電子DIY,樹莓和單片機開發板究竟pick誰?

    網絡)看過樹莓帶來的創造力后,是否也為單片機開發板捏了一把汗,全新樹莓4在電子DIY界帶來
    發表于 11-01 15:43

    玩轉電子DIY,樹莓和單片機開發板究竟pick誰?

    )看過樹莓帶來的創造力后,是否也為單片機開發板捏了一把汗,全新樹莓4在電子DIY界帶來的影
    發表于 11-04 16:31

    請問全志D1哪吒開發板和普通的linux差別大嗎?

    我想找一個可以運行linux的RISC-V開發板,然后找到了全志這個哪吒開發板,想了解一下這個開發板的linux和普通的差別大不。類似
    發表于 12-28 07:04

    arm開發板樹莓有什么區別

    使用的處理器的內核不同。樹莓使用的是ARM-M9內核的處理器,是ARM開發板的一種。ARM開發板不是樹莓
    發表于 12-25 10:10 ?5.8w次閱讀

    e絡盟LOGI開發板:可為樹莓與BeagleBone開發板提供FPGA功能

    e絡盟日前宣布推出LOGI開發板,這一整套易用的軟硬件生態系統可為樹莓與BeagleBone開發板提供FPGA功能。
    發表于 08-24 17:03 ?2442次閱讀

    淺談香蕉樹莓的不同

    目前有許多人在學習嵌入式開發,對于嵌入式開發板也有了一定的了解,比如樹莓、香蕉等。這些以水果稱呼的嵌入式
    發表于 10-30 16:09 ?2.6w次閱讀

    玩轉電子DIY,樹莓和單片機開發板究竟pick誰?

    樹莓帶來的創造力后,是否也為單片機開發板捏了一把汗,全新樹莓4在電子DIY界帶來的影響無疑
    的頭像 發表于 11-05 09:27 ?4287次閱讀

    全志D1哪吒 RISCV64開發板上手評測

    全志D1開發板哪吒 RISCV64)開箱評測 1.概述 2.開箱體驗 3.資料情況 3.1 上手情況 3.2 芯片文檔 4.總體感受 1.概述作為主打RISC-V架構芯片的國產開發板
    的頭像 發表于 05-27 17:56 ?9776次閱讀
    全志D1<b class='flag-5'>哪吒</b> RISCV64<b class='flag-5'>開發板</b><b class='flag-5'>上手</b>評測

    樹莓Pico開發板硬件擴展接口及電源模塊解析

    本博文根據樹莓基金會2021年1月21日公開的兩部最新官方英文技術文獻[1]、[2]以及博主最近使用樹莓Pico開發板的一些思考與應用實
    發表于 11-07 09:06 ?15次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>Pico<b class='flag-5'>開發板</b>硬件擴展接口及電源模塊解析

    OpenHarmony Dev-Board-SIG專場:開發板選型—為什么選擇樹莓3B

    OpenHarmony Dev-Board-SIG專場:開發板選型—為什么選擇樹莓3B
    的頭像 發表于 12-28 14:51 ?2205次閱讀
    OpenHarmony Dev-Board-SIG專場:<b class='flag-5'>開發板</b>選型—為什么選擇<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>3B

    linux開發板樹莓的區別

    定義和用途 Linux開發板:Linux開發板是一種基于Linux操作系統的嵌入式開發板,通常用于工業自動化、物聯網、智能家居等領域。 樹莓
    的頭像 發表于 08-30 15:34 ?936次閱讀

    樹莓和arm開發板的區別

    樹莓(Raspberry Pi)和ARM開發板都是基于ARM架構的微型計算機,但它們之間存在一些關鍵區別。 一、歷史背景 樹莓(Rasp
    的頭像 發表于 08-30 15:36 ?980次閱讀

    ARM開發板樹莓的比較

    ARM開發板樹莓都是基于ARM架構的單板計算機,它們在教育、工業控制、物聯網等領域有著廣泛的應用。 硬件配置 ARM開發板樹莓
    的頭像 發表于 11-05 11:11 ?404次閱讀
    主站蜘蛛池模板: 欧美丰满少妇久久无码精品| 日日碰狠狠添天天爽| 无码国产成人777爽死在线观看| 亚洲精品美女久久777777| 91欧美秘密入口| 国产乱码一区二区三区| 久久亚洲精品2017| 日韩中文亚洲欧美视频二| 亚洲中文字幕永久在线全国| 把腿张开再深点好爽宝贝 | 调教玩弄奶头乳夹开乳震动器| 国产中文字幕乱码一区| 男欢女爱免费视频| 亚洲乱色视频在线观看| 岛国在线无码免费观| 久久理论片| 胸大的姑娘中文字幕视频| 99久久精品全部| 精品AV无码一二三区视频| 日韩成人黄色| 2019夜夜| 果冻传媒在线观看资源七夕| 日本超A大片在线观看| 诱人的女邻居9中文观看| 国产高清视频免费在线观看| 女人被弄到高潮叫床免| 亚洲伊人久久精品| 国产精品看高国产精品不卡| 欧美高清vivoesosexo10| 亚洲一卡二卡三卡四卡无卡麻豆| 福利一区福利二区| 捏奶动态图吃奶动态图q| 亚洲三级成人| 国产精品久久久久久52AVAV| 欧美v1deossexo高清| 在线看无码的免费网站| 国产人妻麻豆蜜桃色精| 日本69xxxx| 99热只有这里有精品| 久久亚洲高清观看| 一道本在线伊人蕉无码|