ChatGPT規模化服務的經驗與教訓

5f8008e3ab3ca6ad2cbcfb61b1c5becf.jpeg

2022年11月30日,OpenAI發布ChatGPT,以很多人未曾預料的速度迅速走紅。與此同時,由于短時間內用戶量的暴漲,導致服務器過載,迫使OpenAI停止新用戶的注冊。

ChatGPT發布這一年,同樣的情景發生了好幾次。在最近的OpenAI開發日之后,使用量再度激增,隨后OpenAI宣布暫停新用戶使用其付費服務。

這背后體現了大模型提供規模化服務時運維的重要性。Evan Morikawa是OpenAI的工程團隊經理,目前他主要負責將ChatGPT API等工程產品和設計安全地推向全世界。在近期的一次演講中,他分享了OpenAI在ChatGPT發布過程中面臨的工程、產品和組織方面經歷的挑戰以及從中學到的經驗和教訓。

(以下內容由OneFlow編譯發布,轉載請聯系授權。原文:https://www.youtube.com/watch?v=PeKMEXUrlq4&t=109s)

來源 |?LeadDev

OneFlow編譯

翻譯|楊婷、宛子琳

2022年11月30日,我們發布了ChatGPT。當時,OpenAI團隊對ChatGPT發布后的前景持不同看法。

這是我們第一次允許公眾無需預約即可自由訪問模型,這讓一些同事感到緊張。在團隊內部,我們已經感受到ChatGPT的有趣之處,并且認為在它發布以后很可能迅速走紅。此外,我們的GPU資源有限,可能會出現訪問資源上的供不應求。過去,我們對聊天應用一直持保守態度,盡管ChatGPT更安全,對齊程度更高,安全系統更加完善,但仍面臨著被濫用的風險。

同時,團隊中有人對此并不太擔心,因為人們已經可以通過開發者平臺免費使用ChatGPT,并且ChatGPT也不一定會走紅。此外,這只是幾個月前發布的GPT-3.5的微調版本,并不是下一代模型GPT-4,而微調版本的模型更加安全。最后,我們沒有媒體發布會,只是發布了一篇博客和一條推文,因此,似乎不會出什么問題。

在完成最后一次負載測試后,我們發布了ChatGPT。隨后,平臺流量開始上漲,并逐漸穩定,實際上,發布后的流量低于我們的預期。我們一直密切關注發布后的情況,在當天的Hacker News上,我們的最高熱度甚至沒有進入前五,但我們還是感到比較滿意。

在內部,我們將這種情況稱為“低調的研究預覽(low key research preview)”,現在這一術語已經帶上了一些負面色彩,但當時,我們的發布會確實是一個相對低調的研究預覽,因此,當天大家都能在11月30日晚上正常休息。


第二天早上凌晨4點,我們收到了值班室的警報。出于某種原因,日本的用戶訪問量激增,因為日本是最早醒來的地區。之后,消息在Twitter上傳開,Elon Musk也發布了一篇關于ChatGPT的推文,導致熱度進一步高漲。

這時候我們遇到了一點麻煩,為處理突增的流量,團隊實施了一個容量控制措施,這種方法類似于俱樂部門衛,即一旦達到容量限制,我們將不允許新用戶注冊,直到有用戶離開。

我們認為,相比傳統的預約等待列表,這種方式能讓更多人有機會體驗ChatGPT。然而,在內部,我們將這稱之為“失敗鯨(fail whale)”。當時,我們已經達到了容量上限,沒有更多GPU可用了,但“失敗鯨”數量一直在上漲。網站常常崩潰,網頁經常顯示“容量已達上限”,實際上,我們已經盡了最大努力提供最大容量。

在ChatGPT發布后的幾個月里,網站流量越漲越多,越漲越快,因此,我們團隊一直在努力使網站保持穩定,以滿足人們的需求。

在ChatGPT的發布過程中,我們學到了很多經驗教訓,在這里,我主要強調三點:第一,GPU和大規模運行語言大模型的能力;第二,打造一個理智且不斷學習成長的團隊;第三,學習應對模型可能面臨的濫用問題和安全挑戰

1

ChatGPT與GPU

首先,我想討論一下GPU以及ChatGPT如何更好地利用GPU。GPU對ChatGPT及其構建的API至關重要,由于GPU供應極為有限,其特性和成本決定了我們的運營和擴展方式。

為ChatGPT提供動力的計算機擁有大量GPU,每個節點有8塊A100 GPU,每個GPU都配備了特殊的高帶寬內存(HPM),并且需要在所有GPU之間進行通信。為實現這一點,我們采用了NVIDIA提供的特殊NVLink互聯技術,并通過板上的開關將多個GPU緊密連接起來,使它們能夠高速交換數據。同時,系統的每張GPU卡還通過以太網和InfiniBand技術連接到外界,該技術為每張GPU提供了200Gb/s或將提升到400Gb/s的網絡帶寬。對于ChatGPT等大模型,每一點額外的計算能力或帶寬的提升都直接影響模型的用戶體驗和我們所能提供的服務質量。

GPU有許多值得關注的方面,但今天我主要專注以下幾個方面:GPU內存和KV緩存、批處理大小、算子、數據傳輸量與浮點運算數量(Bytes and arithmetic intensity)、任務調度以及自動擴展等。

GPU內存和KV緩存

為了更好地介紹這些內容,先簡要帶大家復習一下AI模型的工作原理。

c20014922c5cfd4feecc98236358a3af.png

當我們向ChatGPT提問時,模型首先接收文本,將其切分成詞元(tokens),然后將每個詞元轉換為一組數字向量,再通過數百億個模型權重進行乘法運算。這些模型權重通過梯度下降逐漸微調,方法是預測互聯網上所有單詞的下一個單詞來進行訓練,然后,我們會計算出下一個最可能出現的詞元的概率。通過不斷重復這個步驟,ChatGPT會最終生成相應的內容。

在這種架構中,每個詞元都能感知到其他單個詞元,這就是自注意機制。文本或上下文越長,我們需要進行的數學運算就越多。不幸的是,自注意機制的復雜度是二次的,文本越長,所需的數學運算也會呈二次增長。此外,我們還需要昂貴的投影操作來用不同維度來映射事物,這聽起來可能不太具有優勢,但我們需要關注幾個相關的屬性。

首先,我們可以在先前的所有詞元上進行數學計算并進行緩存,這就是KV緩存,K、V指的是在注意力機制中使用的主要矩陣的名稱。需要注意的是,第三個矩陣Q的數值每次都會變化,并且無法被緩存,實際上這只是一種命名約定。最關鍵的是,我們需要將這個緩存存儲在GPU中,這是一種特殊的HBM3內存。之所以選擇使用HBM3內存,是因為通過PCIe總線傳輸數據的速度比HBM3內存慢兩個數量級,而HBM3內存的傳輸速度達到3TB/s,對于處理大量數據非常重要。由于HBM3內存與GPU相連,因此具有極高的并行數據吞吐量。

由于GPU HBM內存價格昂貴且容量有限,因此主要用于存儲模型權重。一旦這些內存空間用完,系統將按照“最舊的先過期”原則來管理內存。如果發生緩存未命中,即需要的數據不在緩存中,我們就需要重新計算整個聊天對話。此外,由于我們在所有用戶之間共享GPU內存,如果某個對話在一段時間內沒有操作,它可能會被移出內存。

上述情況意味著:首先,GPU內存實際上成為我們最寶貴的資源之一,它常常代表著某些運算瓶頸,而不僅僅是計算量本身。其次,緩存未命中會對GPU的工作量產生顯著的非線性影響,因為我們突然需要重新計算所有內容。

因此,在擴展ChatGPT時,我們不能只簡單考慮CPU利用率指標,還需要關注KV緩存,盡可能充分利用所有GPU內存。

批處理大小

批處理大小是另一個指標,大致表示在同一時間發送到GPU的并行請求數量。在H100 GPU中,最多可以在內存寄存器中移動3.35TB/s的RAM,并且在這一秒內,我們可以執行1.98千萬億次8位浮點數的乘法運算。

這意味著,在移動一個字節的時間可以執行591次浮點運算,在行業中,這被稱為591:1的運算比率。換句話說,如果要花一定時間移動整個千兆字節的數據,就應該至少執行5910億次浮點運算,否則會浪費GPU和潛在計算能力。但如果超過這一比率,就需等待內存帶寬將數據傳輸到內存中。

在ChatGPT模型中,需要移動的內存量基本是固定的,大致等于模型權重大小。這意味著,通過改變批處理大小,可以控制可執行的數學運算量。

因此,在擴展ChatGPT時,我們還需要監視批處理大小,以確保GPU得到充分利用。

總體而言,批處理大小和KV緩存的結合是我們確定服務器負載程度的主要指標,我們花了一些時間才確定這一結論。最初,我們使用類似于標準CPU利用率指標的簡化GPU利用率指標,但結果證明這一指標具有誤導性。

簡單的利用率指標只能告訴我們在某個時間段內GPU是否在進行數學計算,而不能告知我們計算強度是否已經飽和,或者我們是否正在耗盡KV緩存。

數據傳輸量與計算強度

雖然在這里我只討論了KV緩存和批處理大小,但實際上瓶頸也可能來自內存帶寬、網絡帶寬、GPU以及節點等各種因素。此外,這些瓶頸的位置在模型大小、架構和使用模式上也差異巨大。例如,相比讓ChatGPT寫文章,它在總結文章方面的性能特性有著天壤之別。

實際上,對于OpenAI和芯片制造商來說,由于上述差異,要設計出完美平衡的芯片十分困難。例如,盡管下一代H100相比A100計算性能提高了6倍,但內存帶寬只增加了2倍,我們與其他語言大模型公司發現,很容易碰到內存限制,這實際上限制了新GPU的增益價值。而且,由于H100設計方案幾年前就已經確定,NVIDIA本身無法預知這一點。

未來的機器學習架構和規模對于我們和其他人來說都難以預測,但總體而言,我們需要不斷調整數學計算,使其與模型的演進相匹配。

其次,我們面臨的挑戰是GPU的供應問題。OpenAI和整個AI領域的發展速度遠遠超過了NVIDIA或整個臺積電供應鏈能夠生產的速度。由于半導體和數據中心供應鏈的復雜性,我們會遭遇各種瓶頸。因此,擺脫這一困境的方式之一就是盡可能地獲取GPU,而選擇合適的地理位置可能會緩解GPU緊張的問題。

51a082ad519addcbd6113747fa80f47d.png

因此,我們的業務范圍很快就覆蓋了全球多個地區。需要注意的是,上圖實際上是Azure公共區域的地圖,我們是基于Microsoft Azure進行部署的,但僅限于圖中所示的部分地區。為應對業務范圍的擴展,團隊不得不迅速熟悉Terraform和集群管理,以便快速創建和管理這些部署。盡管從一開始就實現多區域和多集群的部署極具挑戰,但由于GPU資源緊缺,這是不可避免的。

此外,需要注意的是,響應時間主要由GPU逐個輸出詞元的時間所決定。因此,為提高整體響應速度,關鍵是增加服務器集群的容量并優化,而不是單純追求服務器與用戶離得近(以減少網絡延遲)

最后一個主要挑戰是,無法迅速擴展服務器集群,沒有更多GPU資源可供自動擴展。這意味著,當ChatGPT顯示“已滿載”頁面時,團隊無法手動或自動地增加服務器來應對增加的用戶流量。這也導致由于GPU容量不足,我們不得不推遲一些發布計劃和產品功能的推出。

我認為,人們可能沒有充分意識到,如果GPU不受限地供應,ChatGPT所取得的增長可能會更大、更快。

因此,在解決GPU帶來的挑戰時,我們學到了一些關鍵教訓。

首先,我們需要明確這是一個系統工程挑戰,而不僅僅是純粹的研究項目,這至關重要。我們優化鍵值(KV)緩存、全球數據中心戰略以及產品需求的能力非常重要,團隊能夠跨越整個技術棧也是關鍵所在。

其次,適應性地考慮系統的約束條件十分關鍵。在OpenAI之前,我習慣于觀察只有80%的CPU利用率指標就自動擴展到一個無限大的云平臺,并優先考慮邊緣計算,但在這里,這一切都不適用。此外,每當模型架構發生變化、提出新的推理想法或產品決策發生變化時,我們都需要靈活適應并重新運行這些計算。

最后,深入研究的重要性。對于我們而言,最底層的實現細節至關重要。盡管我愿意將其視為一個黑匣子,接收文本輸入,然后在另一端輸出更智能的文本,但實際上,更多人深入研究這個“匣子”的細節,我們就能取得更大進步。隨著GPT-5、微調、代碼執行和更大規模等問題不斷升級,這些挑戰只會變得更加復雜。盡管我談論這些問題時是以ChatGPT為背景,但我預計這些經驗在未來仍將繼續發揮作用。

2

團隊建設

我想討論的第二個經驗教訓是,在努力保持靈活性和快速推進的同時擴大團隊。

在ChatGPT項目發布時,應用工程團隊包括我在內總共大約有30人。現在,10個月后,團隊規模已增長到近100人。眾所周知,OpenAI在團隊規模增長方面一直存在著高度的緊張關系。我們的首席執行官Sam Altman一直堅信高人才密度,并致力于以盡可能小的團隊完成盡可能多的工作。因此,我們一直在努力保持團隊的小規模,以保持快速迭代、充滿朝氣的實干文化。

然而,隨著產品規模的擴大,我意識到擴大團隊規模的迫切性。在其他地方可能需要數百人的部門,在我們團隊卻只有幾個人在支撐,而且有時甚至有人在度假。我認為,我們做過的最有影響力的事情之一就是將自己組織起來,以捕捉高度整合、快速發展的初創企業最初階段的本質。

2d73e809b8a8c3db564464f54cd9a4c0.png

ChatGPT背后的團隊看起來像一家剛成立10個月的初創公司。在ChatGPT項目剛開始時,團隊有意識地選擇了一個全新的代碼倉庫、新的集群和輕量級的安全控制。我們還確保研究團隊與產品開發周期緊密結合,對我們來說,DERP(設計、工程、研究和產品)應該集中在一個團隊中。

如今,團隊的運行節奏、流程狀況、溝通效率以及每個人的責任水平都更加貼近我們對成立一年的初創公司的預期。此外,OpenAI還有一點與眾不同,當初大家都在同一個辦公室里共同努力,實際上,這在混亂的初創時期起到了一定作用。

實際上,ChatGPT并非OpenAI第一次采用這種合作模式的項目。大約三年前,當應用團隊研究API時,我們也做了類似的事。因此,在整個組織中,盡管ChatGPT項目感覺像是一個嵌套在有三年歷史初創公司中的10個月大的創業項目,但這些都嵌套在有八年歷史的OpenAI研究實驗室中。隨著新的產品類別不斷涌現,我們預計將嘗試并繼續采用這種分形初創公司模式(fractal startup pattern)。


如今,這一策略要取得成功確實存在一定挑戰,我們承擔了部分技術債務和重復的情況,現在開始加大對泛工程平臺團隊的投資,以提前應對其中的部分挑戰。

我們還存在人才擴張的嚴重傾向,因為OpenAI一直推崇小團隊理念,希望充分利用其優勢,但我們也開始面臨規模和安全相關問題,這些問題需要定制化程度更高和更高效的解決方案。

實際上,我們確實需要一個極具抱負的團隊和一個非常堅定的使命來幫助保持每個人都朝著同一個方向前進。


OpenAI的首要使命是實現一個安全且對齊的通用人工智能(AGI),這使得我們需要權衡許多不同的愿景。我們的確會捫心自問,這是否使我們更接近實現安全且對齊的AGI,以指導未來的發展。

與此同時,像這樣的小型初創公司具有巨大的優勢。當擁有高度的所有權、低依賴性和簡化的流程時,工作更容易完成。初創公司更能保持一種斗志旺盛的環境,我們的迭代周期可以非常短。

同時,在這一領域中,產品問題與研究問題密切相關。我們可以深入思考一下,使創業公司保持高效率的因素,并觀察如何在結構上融入這些因素。這并非毫無代價,但我們認為,當高效率成為我們的關鍵優勢之一時,這種權衡是值得的。

3

濫用問題和安全挑戰

最后,系統濫用和即將到來的人工智能安全問題是我們面臨的主要挑戰。在OpenAI,AI安全、API濫用和產品是密不可分的。防止AI用于大規模的虛假信息宣傳、放大互聯網上最糟糕的部分或導致其他形式的傷害是我們的核心使命。確保采取適當的安全措施一直是項目發布和其他行動的主要阻礙因素。

盡管OpenAI采取了一系列的安全措施來防止系統濫用,但是,濫用者往往能夠迅速適應并找到新的方式來濫用系統。特別是當濫用行為可以帶來經濟利益時,這種適應性尤為明顯。

我想給大家分享一個故事,關于一群人對ChatGPT的API進行逆向工程,以及我們對此所采取的措施。一位工程師發現我們的端點上出現了一些與標準客戶端簽名不完全匹配的流量。當時,相比API流量,ChatGPT應用程序在某種程度上擁有特權。因此,通過ChatGPT獲取訪問權限的濫用者可以比普通API做更多的事。如果我們直接封鎖這些攻擊者,他們會立即察覺,并做出調整。

31f6322ba8517770799deb41a2a6a393.png

團隊中的一位成員提出了一個想法,我們采納了該想法,并立即采取了相應行動。事實證明,我們的安全團隊一直在積極監控這些濫用者的活動。他們加入了濫用行為發生的Discord社區,以便能夠從濫用者的角度觀察和了解情況。

攻擊者很快就察覺到了異常,他們的山寨API不再有任何意義。但他們很快弄清了狀況,不僅如此,甚至給了我們下次更新的建議。隨著時間推移,我們發現了更多試圖濫用API的人,盡管他們的能力不及ChatGPT。

因此,雖然ChatGPT可能只是今天一個有趣的例子,但隨著模型變得更加強大,如果落入錯誤的人手中,可能造成更大的危害。我們需要以指數級速度增加對濫用行為的警惕性。盡管如此,僅靠團隊成員、研究人員和紅隊成員是不可能識別所有可能的濫用和誤用途徑。這就是為什么我們相信逐步與現實世界進行有限的接觸是識別和解決安全問題最重要的方式之一。

與真實用戶進行早期和頻繁的迭代是產品開發中一種常見的做法。在開發ChatGPT時,我們也采用了這種理念。不過,我需要指出的是,一次性向所有人發布ChatGPT,是因為我們花了數年時間在更受控制的環境中逐漸適應了這些模型。而對于較新、風險較高的產品,我們將在識別和緩解風險的過程中經歷幾個階段后才會推出。

此外,我們還相信隨著風險的增加,需要根據情況調整這一策略。波音公司之所以不像Facebook那樣快速地發布產品,是有其原因的,而我們今天的關注點與明天的關注點將會有很大不同。

4

結語

ChatGPT的故事只是剛剛開始,我預計今天我談到的這三個挑戰將以新的形式持續存在。雖然隨著芯片供應鏈的迎頭趕上,GPU可能會變得更加豐富,但隨著消耗越來越大的預算,更加高效地利用GPU的需求也將不斷增長。

GPT-5和其他產品的發布,對計算資源的需求將變得更加緊迫。這個層面會考慮到不同的擴展因素,因為GPU的RAM和高帶寬互連與每秒能夠進行多少次乘法運算同等重要。

保持團隊中初創企業的本質一直是我們保持靈活性的唯一方式。雖然這涉及到權衡,但我們已經多次重復這樣的努力。隨著我們的成長,這將變得更加具有挑戰性。同時,隨著新的挑戰出現,OpenAI在企業文化方面的努力也必須不斷調整,以延續這種精神。

最后,OpenAI一直面臨一些意想不到的挑戰,尤其是那些精明濫用者的挑戰。雖然這些挑戰并不總是令人愉快,但有時我們也能從中有所收獲。因此,盡管前文提到的CatGPT可以緩解先前的濫用問題,但在未來,濫用安全和對齊挑戰將更加嚴峻,如果這些問題變得更為復雜,我們將需要投入更多努力。安全任務是一個核心問題,我們將持續重點關注這一領域。

關于ChatGPT的幕后故事還有很多,至少和那些為實現這一切作出貢獻的人一樣多。即使這些故事的一小部分,也代表了數十位工作人員的辛勤努力。非常有幸與你分享他們的工作。

其他人都在看

  • GPU架構與計算入門指南

  • 為什么開源大模型終將勝出

  • 可復現的語言大模型推理性能指標

  • OpenAI:“駕馭”超級智能的四年計劃

  • 語言大模型推理性能工程:最佳實踐

  • OpenAI首席科學家:直面AGI的可能性

  • 開源語言大模型演進史:向LLaMA2看齊

試用OneFlow: github.com/Oneflow-Inc/oneflow/icon-default.png?t=N7T8http://github.com/Oneflow-Inc/oneflow/???????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

opencv-圖像金字塔

圖像金字塔是一種圖像處理技術,它通過不斷降低圖像的分辨率,形成一系列圖像。金字塔分為兩種類型:高斯金字塔和拉普拉斯金字塔。 高斯金字塔(Gaussian Pyramid): 高斯金字塔是通過使用高斯濾波和降采樣&a…

專業遠程控制如何塑造安全體系?向日葵“全流程安全閉環”解析

安全是遠程控制的重中之重,作為國民級遠程控制品牌,向日葵遠程控制就極為注重安全遠控服務的塑造。近期向日葵發布了以安全和核心的新版“向日葵15”以及同步發布《貝銳向日葵遠控安全標準白皮書》(下簡稱《白皮書》),…

使用微信小程序openMapApp接口,報錯問題解決openMapApp:fail invaild coord

使用微信小程序的 openMapApp 接口時遇到了坐標無效的錯誤 (openMapApp:fail invalid coord)。這個錯誤通常是由于提供的地理坐標不符合預期的格式或范圍而引起的: 坐標格式: 確保提供的坐標符合正確的格式。常見的格式是 "緯度,經度"&#xf…

【11月比賽合集】5場可報名的「創新應用」、「數據分析」和「程序設計」大獎賽,任君挑選!

CompHub[1] 實時聚合多平臺的數據類(Kaggle、天池…)和OJ類(Leetcode、牛客…)比賽。本賬號會推送最新的比賽消息,歡迎關注! 以下信息僅供參考,以比賽官網為準 目錄 創新應用賽(1場比賽)數據分析賽&#…

逸學java【初級菜鳥篇】9.3 Stream流

hi,我是逸塵,一起學java吧 得益于Lambda所帶來的函數式編程,引入了一個全新的Stream流概念(就是都基本使用lambda的形式)。 流處理 我們首先理解什么是流處理,它類似于sql語句,可以執行非常復…

【開源】基于Vue和SpringBoot的智能教學資源庫系統

項目編號: S 050 ,文末獲取源碼。 \color{red}{項目編號:S050,文末獲取源碼。} 項目編號:S050,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 課程檔案模塊2.3 課…

原理Redis-SkipList

SkipList ZipList和QuickList的共同特點是節省內存。在遍歷元素時,只能從頭到尾或從尾到頭,所以在查找頭尾元素性能還是不錯的,但是中間元素查詢的性能就會差。 **SkipList(跳表)**首先是鏈表,但與傳統鏈表…

【算法】鏈表-20231123

這里寫目錄標題 一、19. 刪除鏈表的倒數第 N 個結點二、21. 合并兩個有序鏈表三、24. 兩兩交換鏈表中的節點 一、19. 刪除鏈表的倒數第 N 個結點 提示 中等 給你一個鏈表,刪除鏈表的倒數第 n 個結點,并且返回鏈表的頭結點。 輸入:head [1,…

第十二章 : Spring Boot 日志框架詳解

第十二章 : Spring Boot 日志框架詳解 前言 本章知識重點:介紹了日志誕生背景,4種日志框架:Logback、Log4j、Log4j2和Slf4j的優劣勢分析,以及重點介紹了log4j2的應用示例以及配置,以及日志框架應用中遇到常見的問題以及如何處理。 背景 Java日志框架的發展歷程可以追…

在PyCharm中正確設置Python項目

大家好,在Mac和Linux都支持Python,但許多開發者發現正確設置Python項目很困難。本文匯總了多平臺中運行Python的方法,提高編程的效率,如下所示: 使用命令行運行Python。 在PyCharm(免費社區版)…

【技巧】PDF文件如何編輯?

日常辦公中我們經常會用到PDF文件,PDF具備很好的兼容性、穩定性及安全性,但卻不容易編輯,那PDF要如何編輯呢? 如果打開PDF文件就只是只讀的性質,說明文件是在線打開,或者通過PDF閱讀器打開的,這…

Navmesh 尋路

用cocos2dx引擎簡單實現了一下navmesh的多邊形劃分,然后基于劃分多邊形的a*尋路。以及路徑拐點優化算法 用cocos主要是方便使用一些渲染接口和定時器。重點是實現的原理。 首先畫了一個帶有孔洞的多邊形 //多邊形的頂點數據Vec2(100, 100),Vec2(300, 200),Vec2(50…

高防服務器的工作原理

在當今互聯網時代,網絡安全問題日益突出,各種網絡攻擊層出不窮。為了保護企業的網絡安全,高防服務器應運而生。那么,你是否了解高防服務器的工作原理呢?下面就讓我們一起來探索一下。 高防服務器是一種能夠有效抵御各種…

語音識別入門——常用軟件及python運用

工具以及使用到的庫 ffmpegsoxaudacitypydubscipylibrosapyAudioAnalysisplotly 本文分為兩個部分: P1:如何使用ffmpeg和sox處理音頻文件 P2:如何編程處理音頻文件并執行基本處理 P1 處理語音數據——命令行方式 格式轉換 ffmpeg -i video…

shell 腳本循環語句

目錄 循環 echo 命令 for 循環次數 for 第二種格式 命令舉例 while 腳本舉例 雙重循環及跳出循環 腳本舉例 更改文件和目錄的后綴名的腳本 畫三角形的腳本 乘法口訣表的腳本 面試例題 補充命令 let 命令 循環 —— 一定要有跳出循環的條件 已知循環的次數 未知…

英語六級范文模板

目錄 現象解釋 觀點選擇 問題解決 六級只考議論文,我們將從現象解釋,觀點選擇,問題解決三個角度給出范文: 多次使用的句子,就可以作為模板記下來~~ 現象解釋 In the contemporary world, the ability to meet cha…

SQLite3

數據庫簡介 常用的數據庫 大型數據庫:Oracle 中型數據庫:Server 是微軟開發的數據庫產品,主要支持 windows 平臺。 小型數據庫:mySQL 是一個小型關系型數據庫管理系統,開放源碼 。(嵌入式不需要存儲太多數據。) SQL…

點云從入門到精通技術詳解100篇-基于點云數據的機器人裝焊 過程在線測量(下)

目錄 裝焊過程在線測量技術研究 4.1 測量參數介紹 4.1.1 筋板定位測量參數

Rust個人學習之結構體

第一反應,Rust結構體跟python的很像,不知道感覺對不對; 書中提到第一反應,Rust結構體跟python的很像,不知道感覺對不對; 書中提到:結構體是一種自定義數據類型,它允許命名多個相關的…

Seaborn畫圖顏色和給定的RGB hex code不一致

使用以下代碼畫圖: import seaborn as sns import matplotlib.pyplot as plt plt.figure(dpi150) x [A,B,C,D] y [164, 86, 126, 53] sns.barplot(xx, yy, color#3a923a) 得到的顏色如下圖所示: 這是因為seaborn默認降低了顏色的飽和度,即…