深入淺出騰訊BERT推理模型–TurboTransformers

Overview

TurboTransformers是騰訊最近開源的BERT推理模型,它的特點就是一個字,快。本人用BERT(huggingface/transformers)在V100上做了測試,測試結果和官宣的基本一致:TurboTransformers的推理速度要比Pytorch快上1~4倍。

它之所以快,是因為它是專用於BERT的輕量級推理模型。

分層

不管是計算機的硬件、軟件,還是現在的深度學習,它們都遵循着一個很重要的設計思想–分層:

  • 用簡單的代碼(或電路)來實現一個基本功能組件。
  • 用幾個基本組件組合成一個功能更強的複雜組件。
  • 從簡單到複雜,像搭積木一樣,一層層地搭建出擁有很強功能的組件。

開發者只需要基於PyTorch的幾個基本組件就能搭建出BERT模型,而且這些組件本身對他們來說都是透明的。正因如此,PyTorch才越來越受到研究者青睞。

分層設計的優點很多,例如,可以簡化問題、降低創新門檻、加速開發等,但它的缺點也很明顯:

  • 流程固定化
  • 存在中間層延遲

深度神經網絡里有個經典套路:一個激活函數層後面緊跟着一個dropout層。PyTorch需要lanuch兩個GPU kernel程序來完成這兩步計算。

F.dropout(F.relu(x))

實際上,這兩項計算都是element-wise的,是可以合併成一個kernel的。但目前來說,不管是PyTorch,還是其他的通用訓練框架,它們都很少有提供這種融合計算的API。

至於中間層延遲,最經典的要屬“hello world”程序。雖然只有幾行代碼,但實際上要經過的中間層數根本數不過來。

你可以閱讀深入淺出PyTorch(算子篇)來了解下矩陣相乘這個最基本的計算在PyTorch里要經過多少个中間層。

分層展開

要想將程序的低延遲最大化,就需要把分層的代碼完全展開,並重構代碼。典型例子就是嵌入式系統,為了實現某種需求,它可以打破應用程序、程序庫、操作系統甚至是硬件設備的界限,打造一個軟硬件一體化產品。

這種分層展開的設計模式當然也有它的局限性:專用。由於高度定製化,它通常只能用於完成某個特定功能。低延遲和專用化是呈絕對的正相關的。

TurboTransformers就是採用這種設計:只實現BERT模型前向傳播所需要的算子,並融合那些可以合併的算子。

turbo.Tensor

首先,它用CUDA開發了一個輕量級的tensor計算庫,所謂的輕量級,指的是不用考慮反向傳播、稀疏矩陣等操作,只實現BERT前向傳播所必需的operator。

雖然tensor庫是用C++寫的,但考慮到python在AI開發中的地位,它用pybind11將C++ API暴露給前端的python Tensor類。

# turbo_transformers/python/pybind.cpp
 72   py::class_<core::Tensor>(m, "Tensor")                      
 73       .def_static("from_dlpack",
 74                   [](py::capsule capsule) -> std::unique_ptr<core::Tensor> {
 75                     auto tensor = (DLManagedTensor *)(capsule);
 76                     PyCapsule_SetName(capsule.ptr(), "used_tensor");
 77                     return absl::make_unique<core::Tensor>(tensor);
 78                   })
 79       .def("to_dlpack",
 80            [](core::Tensor &tensor) -> py::capsule {
 81              auto *dlpack = tensor.ToDLPack();                    
 82              return py::capsule(dlpack, "dltensor", DLPack_Capsule_Destructor);
 83            })
 84       .def("n_dim", &core::Tensor::n_dim)
 85       .def("shape", &core::Tensor::shape)

從預訓練模型(PyTorch)那遷移參數時,turbo.Tensor不能直接對接torch.Tensor,需要先將PyTorch的參數轉成dlpack格式, 再通過from_dlpack()將這些數據導入生成TurboTransformers tensor。除了dlpack之外,還支持*.npz文件格式。

turbo.xxxlayer

TurboTransformers用CUDA重構了Embedding、self-attention、intermediate、output、LayerNorm和pooler等layer。turbo.layer不僅代碼結構簡潔,overhead少,還合併了一部分算子。

這裏以intermediate layer為例,來分析這些算子的特點。

intermediate layer的實現比較簡單:一個Linear layer後面緊跟着一個gelu activation layer。

PyTorch的intermediate layer的會lanuch 3個kernel來完成這部分計算:

  • #1: y = input.matmul(weight)
  • #2: y = y + bias
  • #3: y = gelu(y)

由於#2和#3都是element-wise kernel,turbo把它們進行了融合–AddBiasAct(),相同的計算操作,只需要lanuch 2個kernel,計算速度當然更快。

和PyTorch一樣,turbo的MatMul算子也是調用cuBLAS來進行矩陣運算,而且turbo還啟用了Tensor Core來加速計算(CUBLAS_TENSOR_OP_MATH)。

總結

到此,本文基本上講清了TurboTransformers的速度優勢來源,由於篇幅所限,不能分析所有的算子。BERT的核心模塊是self-attention,如果想了解更多,可以閱讀深入淺出Transformer。

更多精彩文章,歡迎掃碼關注下方的公眾號 ~~ 歡迎關注和點贊,你的鼓勵將是我創作的動力

歡迎轉發至朋友圈,公眾號轉載請後台留言申請授權~

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

.NET高級調試系列-Windbg調試入門篇

Windbg是.NET高級調試領域中不可或缺的一個工具和利器,也是日常我們分析解決問題的必備。準備近期寫2篇精華文章,集中給大家分享一下如果通過Windbg進行.NET高級調試。

今天我們來一篇入門的文章。首先,Windbg是什麼?

Windows Debugger,簡稱WinDbg,.NET 最強分析調試利器。它可以用來:

  • 調試內核模式和用戶模式代碼
  • 分析Crash dump
  • 分析代碼執行時 CPU 寄存器信息

我們可以通過WinDbg調試以下具體問題:

  • 線程阻塞
  • 內存泄露
  • 分析查詢運行時線程堆棧和變量
  • 分析進程Crash原因
  • 分析消耗CPU原因
  • 查看並調試CLR異常

那麼,首先我們先進行Windbg下載安裝、配置。

一、下載安裝WinDbg,配置調試環境

1. 推薦下載鏈接

https://raw.githubusercontent.com/EasyDarwin/Tools/master/Windbg_x86_x64/dbg_amd64.msi

或者從Windows Store下載 WingDbg Preview版本

下載后一步一步安裝即可

 2. 配置調試符號

大家會問一個問題:為什麼要配置調試符號?

若要使用 WinDbg 提供的所有高級功能,必須加載適當的符號:比如說我們可以調試、查看.NET CLR程序堆棧,此時要加載對應的調試符號。

 微軟提供了統一的調試服務服務器地址:

http://msdl.microsoft.com/download/symbols,將這個地址提供的調試符號,下載緩存到本地,Windbg調試的時候可以用上。
srv*c:\symcache*http://msdl.microsoft.com/download/symbols;c:\symcache

  

3. 下載並使用WinDbg調試器擴展

 Windbg調試器擴展是Windbg調試的精華和核心,可以這麼說,掌握各類Windbg調試器擴展,你就掌握了各類調試技能。

 默認情況下,WinDbg的調試指令是有限的,通過一些WinDbg調試器擴展,可以方便我們進行.NET 程序調試

 SOS調試擴展 : 隨着.NET Framework安裝,可以直接加載:  .load sos clr

 SOS這個dll在哪裡呢(分32位和64位)?

 4.0, 32-bit –> C:\Windows\Microsoft.NET\Framework\v4.0.30319
 4.0, 64-bit –> C:\Windows\Microsoft.NET\Framework64\v4.0.30319

  MEX調試擴展:This extension is widely used by Microsoft Support Engineers in troubleshooting process applications

 下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=53304

 下載完成后,將32/64位的Mex.dll 拷貝到windbg安裝目錄中

 例如:C:\Program Files\Debugging Tools for Windows (x64)\Mex.dll

 詳細使用說明:https://github.com/REhints/WinDbg/tree/master/MEX

 下載、安裝、配置完成Windbg之後,接下來我們了解一下一些基本的調試命令。

二、基本的WinDbg調試指令

1. WinDbg自帶的調試指令

 

   

    更多指令,可以查看一下鏈接:

    https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg

 2. SOS調試擴展常用的調試指令

   

    

    

 

  

  

  

  

 

  

   3. Mex調試擴展常用的調試指令

   

     

    

    

    

    

     更多Mex調試指令,可以查看鏈接:https://github.com/REhints/WinDbg/tree/master/MEX

 

  以上是整個Windbg調試入門篇的介紹,希望大家能夠掌握,下一篇我們將通過一些具體的案例,示意各個指令的使用場景。

 

周國慶

2020/6/27

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

GCC編譯和鏈接過程

GCCGNU Compiler CollectionGNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟件,也是 GNU計劃的關鍵部分。GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如LinuxBSDMac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows

 

一、源代碼

 

 

二、編譯過程

 

1)預處理:

 

 預處理就是將要包含(include)的文件插入原文件中、將宏定義展開、根據條件編譯命令選擇要使用的代碼,最後將這些代碼輸出到一個“.i”文件中等待進一步處理。

結果:見文件0617_Demo.i

 

 2)編譯

 

 

 編譯就是把C/C++代碼(比如上面的“.i”文件)“翻譯”成彙編代碼。

結果:見文件0617_Demo.s

 

 3)彙編

 

 

 紅色箭頭處的relocatable表示可重定位,也即是可以和庫等依賴文件鏈接。

彙編就是將第二步輸出的彙編代碼翻譯成符合一定格式的機器代碼,在Linux系統上一般表現位ELF目標文件(OBJ文件)

結果:見文件0617_Demo.o

 

 這個就是沒有連接的目標代碼,也是01序列,需要使用二進制查看器如Hex Editor Neo等查看。

 

4)鏈接

 

 鏈接就是將彙編生成的OBJ文件、系統庫的OBJ文件、庫文件鏈接起來,最終生成可以在特定平台運行的可執行程序。如圖中紅色箭頭所示。

結果:見文件0617_Demo

 

 總結:在編譯過程中。除非使用了“-c”,“-S,“-E”選項(或者編譯錯誤阻止了完整的過程),否則統一完整鏈接步驟。

 

三、鏈接原理

gcc -c -o 0617_Demo.o 0617_Demo.c 不作最後一步鏈接,得到0617_Demo.o二進制OBJ文件

gcc -v -o 0617_Demo 0617_Demo.o 先看一下鏈接過程是怎樣的:

 

  

l  crt1.ocrti.ocrtbegin.ocrtend.ocrtn.ogcc加入的系統標準啟動文件,對於一般應用程序,這些啟動是必需的。

l  -lc:鏈接libc庫文件,其中libc庫文件中就實現了printf等函數。

 

 

 

 

 

GCC編譯和鏈接過程

 

GCCGNU Compiler CollectionGNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟件,也是 GNU計劃的關鍵部分。GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如LinuxBSDMac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows

 

一、源代碼

 

二、編譯過程

1)預處理:

預處理就是將要包含(include)的文件插入原文件中、將宏定義展開、根據條件編譯命令選擇要使用的代碼,最後將這些代碼輸出到一個“.i”文件中等待進一步處理。

結果:見文件0617_Demo.i

 

2)編譯

編譯就是把C/C++代碼(比如上面的“.i”文件)“翻譯”成彙編代碼。

結果:見文件0617_Demo.s

 

3)彙編

紅色箭頭處的relocatable表示可重定位,也即是可以和庫等依賴文件鏈接。

彙編就是將第二步輸出的彙編代碼翻譯成符合一定格式的機器代碼,在Linux系統上一般表現位ELF目標文件(OBJ文件)

結果:見文件0617_Demo.o

這個就是沒有連接的目標代碼,也是01序列,需要使用二進制查看器如Hex Editor Neo等查看。

 

4)鏈接

鏈接就是將彙編生成的OBJ文件、系統庫的OBJ文件、庫文件鏈接起來,最終生成可以在特定平台運行的可執行程序。如圖中紅色箭頭所示。

結果:見文件0617_Demo

 

總結:在編譯過程中。除非使用了“-c”,“-S,“-E”選項(或者編譯錯誤阻止了完整的過程),否則統一完整鏈接步驟。

 

三、鏈接原理

gcc -c -o 0617_Demo.o 0617_Demo.c 不作最後一步鏈接,得到0617_Demo.o二進制OBJ文件

gcc -v -o 0617_Demo 0617_Demo.o 先看一下鏈接過程是怎樣的:

 

l  crt1.ocrti.ocrtbegin.ocrtend.ocrtn.ogcc加入的系統標準啟動文件,對於一般應用程序,這些啟動是必需的。

l  -lc:鏈接libc庫文件,其中libc庫文件中就實現了printf等函數。

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

當我們創建HashMap時,底層到底做了什麼?

jdk1.7中的底層實現過程(底層基於數組+鏈表)

在我們new HashMap()時,底層創建了默認長度為16的一維數組Entry[ ] table。當我們調用map.put(key1,value1)方法向HashMap里添加數據的時候:

首先,調用key1所在類的hashCode()計算key1的哈希值,通過key1的hash值與數組的最大索引進行位運算以後,得到了在 Entry數組中的存放位置:

如果此位置上的數據為空,此時的key1-value1添加成功。

如果此位置上的數據不為空(意味着此位置已經存在一個或多個數據),比較key1和已經存在的一個或多個數據的哈希值:

如果key1的哈希值與已經存在的數據的哈希值都不相同,此時key1-value1添加成功。

如果key1的哈希值與已經存在的數據的某一個數據的哈希值相同,繼續比較:調用key1所在類的equals()方法:

如果equals()返回false,此時key1-value1添加成功;

如果equals()返回true,使用value1替換value2。

需要注意的是,若原來位置已有數據,則此時key1-value1和原來的數據以鏈表的方式存儲。

在不斷的添加過程中,會涉及到擴容問題,當數組容量大於數組現有長度乘以加載因子(如16*0.75,默認的加載因子為0.75)的時候,就會進行數組擴容,以減少哈希衝突(哈希衝突是指哈希函數算出來的地址被別的元素佔用了),提高查詢效率。默認的擴容方式,擴容為原來容量的2倍,並將原有的數據複製過來。

jdk1.8的底層實現過程(底層基於數組+鏈表+紅黑樹)

jdk1.8與jdk1.7中底層的創建過程相似,但有不同,首先,new HashMap()底層沒有創建出一個長度為16的數組,在調用put()方法時,判斷數組是否存在,如果不存在創建長度為16的Node[ ]數組。接下來的過程與jdk1.7相似。最後,當某一個索引位置上的元素以鏈表形式存在的數據個數>8且當前數組的長度>64時,此時此索引位置上的所有數據改為使用紅黑樹存儲。

在jdk1.7中,即使在“數組容量大於數組現有長度乘以加載因子”時擴容,也不可避免地會有哈希衝突存在,因此,在jdk1.8中引入紅黑樹是為了進一步減少哈希衝突,提高查詢效率。

紅黑樹是一種自平衡的二叉查找樹,是一種數據結構,典型的用途是實現關聯數組。根節點必須是黑色,其他每個節點要麼是紅色,要麼是黑色。

結論:HashMap鍵是不能重複的,去除重複的條件是依賴鍵的hashCode方法和equals方法,如果鍵是自己的對象類型,必須要重寫hashCode方法和equals方法,否則,不能去除重複的鍵。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

砍斷手臂、背刺 批評非法棕櫚油開發 兩名印尼記者身亡

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:Mongabay

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

蘇聯秘密鈾礦計畫遺毒 中亞國家與輻射災難賽跑

摘錄自2019年11月6日中央社報導

吉爾吉斯邁盧蘇鎮在蘇聯時期有神祕稱號:Mailbox 200,是一項鈾礦秘密開發計畫執行地。如今城鎮蕭條,鄰近地質不穩處還有數座鈾尾礦堆隨時可能傾塌,污染環境。

這些鈾尾礦堆(鈾殘渣堆)重達數萬噸,只消一次天然災害,水流冲刷或山體滑坡,就有可能污染人口達1400萬且橫跨吉爾吉斯、烏茲別克和塔吉克接壤地帶的費爾干納盆地(Ferghana valley)飲用水。

根據歐盟執委會歐洲復興開發銀行(EBRD),這些接連遭蘇聯和吉爾吉斯政府忽略數十年的鈾尾礦堆必須盡快強化,以避免災難。為此,它們正為此籌募約3000萬歐元經費。此外,為在蘇聯時期也有鈾礦場運作的鄰國塔吉克進行類似清除工作,必需另外籌募4000萬歐元經費。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

研究:強風暴可能會動搖海床 引起「風暴地震」

編譯:嚴融怡(胡適國小創思組科任教師)

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

伊朗將鈾氣體注入地下核設施離心機 法俄警戒

摘錄自2019年11月7日中央社外電報導

伊朗國營電視台與半島電視台報導,伊朗恢復福爾多地下核設施運作,將鈾氣體注入離心機,法國表示,這是首次顯示,德黑蘭當局打算揚棄與世界強權簽署的限縮核子活動核協議。

針對伊朗決定開始把鈾氣體注入福爾多(Fordow)核設施的離心機,進一步遠離核協議,俄羅斯也表達憂慮。這項協議主要目的在於把伊朗打造出核武的時間,從2至3個月拉長至1年。

伊朗國營電視台報導:「在國際原子能總署(International Atomic Energy Agency,IAEA)監察人員在場情況下,伊朗開始將(鈾)氣體注入福爾多核設施的離心機。」

2015年簽署的核協議禁止福爾多從事提煉濃縮鈾作業,但在伊朗將鈾氣體注入離心機後,這項設施將從獲准從事研究計畫工廠,變成運作中核子設施。

然而,伊朗原子能組織(Atomic Energy Organisation of Iran)發言人卡馬萬迪(Behrouz Kamalvandi)隨後告訴國營電視台,將從午夜(2030 GMT,台灣時間7日凌晨4時30分)開始注入鈾氣體。

卡馬萬迪表示:「我們已經把2800公斤圓筒置於福爾多,其中包括2000公斤六氟化鈾氣體…那些離心機將提煉純度達4.5%的濃縮鈾。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

近八成電動車指標沒人要 深圳首輪小汽車搖號結果出爐

深圳市首輪小汽車增量指標搖號3月9日舉行,最終產生4類增量指標共4912個。與報名熱絡的普通小汽車相比,電動車寥寥無幾。配置的2222個電動車指標,最終只產生476個中籤者,剩餘近八成指標。深圳市小汽車指標調控管理中心負責人表示,電動車中籤率高的這一結果希望能對申請人有所啟示。      首期搖號搖出了四類增量指標,具體包括3912個個人普通小汽車增量指標,524個單位普通小汽車增量指標,471個個人電動小汽車增量指標、5個單位電動小汽車增量指標。4類指標經過4輪搖號分別產生,整個搖號過程歷時約60分鐘。   對比之前公佈的資料,配置的指標共6667個,其中:普通小汽車增量指標4445個,包括3912個個人普通小汽車增量指標、533個單位普通小汽車增量指標;電動小汽車增量指標2222個,其中個人電動小汽車增量指標1955個,單位電動小汽車增量指標267個。而通過搖號,個人電動車指標結果只產生了471個,單位電動車指標僅產生5個,有78%的電動車指標剩餘,將自動轉入下次配置。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

以電動巴士為先導 比亞迪今年將進軍韓國市場

比亞迪亞太汽車銷售事業部總經理劉學亮近日在韓國國際電動汽車展期間表示,比亞迪計畫以電動巴士為先導打入韓國市場,力爭在2015年年底之前讓韓國民眾享用上比亞迪的電動車。未來也可能會根據韓國消費者的具體需求,尋求E6系列計程車的進入韓國市場的可能性。   他表示,新能源汽車作為新興產業進入別國需經過包括政府認證在內的漫長流程,。比亞迪正在和不同的當地合作方接洽,希望最終可以在韓國找到適合發展電動車的新合作模式。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案