AI工程師的筆記本環(huán)境配置

還是愛折騰...

前一陣子買了個新的筆記本電腦墩剖,幻13-3050TI-1T版本版保,全能本,CPU是8核心16線程的標壓版AMD銳龍9-5900HS撤蟆,顯卡是NVIDIA-3050TI火脉,重量和macbook差不多牵舵,都是1.4kg,便攜倦挂、可以改變形態(tài)畸颅。

大概長這樣:

幻13

可以變換3種形態(tài)(莫名有種興奮感),可能也有人問我為啥不買macbook方援,沒買的原因有兩點:

  • macbook不支持nvidia顯卡没炒,這個無解,沒辦法本地跑AI代碼犯戏,只能遠程服務器
  • macbook用膩了送火,有一點審美疲勞,新版的macbook pro也太厚了先匪,感覺不方便攜帶漾脂,主要也貴...

于是有了一臺和macbook接近大小、差不多重量的帶獨顯的全能筆記本胚鸯,日常簡單開發(fā)、調試調試足夠用了笨鸡。CPU是R9-5900HS姜钳、顯卡是3050TI-4G,CPU的編譯速度也還可以形耗,GPU的話除了顯存有點小哥桥,30系列的特性都有了,可以盡情嘗試激涤。

畢竟搞AI的拟糕,當然對GPU比較敏感判呕,這個3050TI是基于GA107核心,有2560個CUDA Core送滞,80個Tensor Core侠草,基本是夠玩了。計算能力8.6犁嗅,目前(這句話寫的時候還是最新边涕,但是立馬老黃3月份推出了H100)最新的特性該有的都有了:

  • FP32、FP16褂微、BF16和INT8精度的支持
  • 第三代Tensor Core等等

附一個GA102的白皮書功蜓,感興趣的可以翻翻。

有了筆記本宠蚂,接下來就是配置開發(fā)環(huán)境了式撼。

之前不想用Windows本主要是習慣了Linux的操作環(huán)境,而Mac和Linux操作起來相差不大求厕,而用windows就會種種不習慣著隆。

所以一開始的方案就是win10+ubuntu雙系統(tǒng):

Ubuntu + win10/win11 雙系統(tǒng)方案

這也是大部分程序員的配置,開發(fā)當然必須是ubuntu了甘改,windows娛樂旅东,ubuntu工作。

這里我先是在win10下安裝了ubuntu十艾,之后在win10+ubuntu雙系統(tǒng)的前提下抵代,將win10升級成了win11。整個升級過程很順滑忘嫉,升級后沒有任何改動(引導沒有被破壞荤牍、ubuntu系統(tǒng)未被破壞)升級完重啟后,可以正常使用ubuntu庆冕,此時雙系統(tǒng)升級為win11+ubuntu康吵。

而裝Ubuntu也是老生常談的話題了,基本都是:

  • 下載好Ubuntu鏡像访递,拿個U盤制作U盤鏡像
  • Win10系統(tǒng)內劃分出一部分磁盤給Ubuntu使用
  • 重啟bios設置啟動方式為U盤然后安裝

我安裝的是20.04版本的Ubuntu晦嵌。

大概就是這么個流程,網上的資料很多很多拷姿,隨便一搜就有了惭载,有一點和之前安裝16.04不一樣,NVIDIA的驅動安裝比想象中要順利很多响巢,四年前那會也在一個筆記本上裝Ubuntu吃了不少苦頭:ubuntu16.04下安裝NVIDIA(cuda)-gtx965m相關步驟以及問題描滔,這次的NVIDIA驅動沒有很多坑,安裝正常邏輯安裝就行踪古,也不需要禁用什么什么的含长。

進入新的Ubuntu系統(tǒng)券腔,基本步驟大體也都一樣:

先切換源,注意源的版本一定和你的ubuntu版本一致(不一致會導致你的各種軟件不兼容拘泞,也就是unmet會很多纷纫,這個我一開始沒有注意,折騰了很久)田弥,去找清華或者阿里源:

然后把/etc/apt中的source.list替換成國內源之后:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential

安裝Ubuntu的必要組件之后涛酗,接下來就是要升級內核(Ubuntu-20.04默認是5.10的內核)。至于為啥要升級內核偷厦,是因為我這個是幻13是比較新的筆記本商叹,有些功能舊版的內核不支持(比如翻轉屏幕、比如鍵盤燈只泼、指紋解鎖啥的)剖笙,于是乎先升級內核。

升級內核有一些坑请唱,我參照了ROG幻13安裝ubuntu20.04弥咪,解決各種驅動問題這篇文章,也確實幫了我大忙十绑,大概就是聚至,如果你從官方kernel中去下載更新,可能會因為官方kernel中的libc6版本不兼容導致sudo apt-get update有時候會出錯本橙,會報各種問題扳躬,需要下載合適版本的kernel才行。

對內核有疑問的可以看看這篇文章甚亭,總之升級內核需要謹慎一些贷币,另外使用最新版本的Ubuntu系統(tǒng),會自帶最新的內核亏狰。

接下來說說WSL2役纹。

win11+wsl2+docker

WSL(Windows Subsystem for Linux)是我在調研win11相關資料時候看到的新名詞,之前只是聽說過暇唾,但沒有實際使用過促脉,現在有windows跑Ubuntu的需求,突然想到可以試試看策州。

wsl的功能就是可以讓你在windows上使用linux系統(tǒng)瘸味。可以讓我這種習慣命令行的人在windows下開發(fā)也不難受抽活。畢竟如果直接在ubuntu下開發(fā),摸魚和聊天確實比較折騰锰什,我還是想實現類似于macos上開發(fā)的效果下硕,娛樂工作兩不誤丁逝,開發(fā)體驗也不割裂

因為mac和nvidia水火不容梭姓,對于我這種搞深度學習極度依賴nvidia顯卡的人來說用mac只能遠程連接服務器來開發(fā)霜幼,在網絡不好的情況下就比較難受了。

貌似WSL2也比VMware虛擬機性能強一些(懂得小伙伴可以說下)誉尖,也可以直接在windows中運行Ubuntu鏡像罪既,然后vscode連接開發(fā),效率直接翻倍铡恕,這點直接抓住了我的心琢感。

目前wsl的最新版是wsl2,wsl和wsl2的區(qū)別挺大探熔,男人的第六感讓我用新不用舊驹针,于是選擇使用wsl2,其實還有一個原因是wsl2下的linux內核可以調用cuda诀艰。

首先升級win11柬甥,再裝一個WSL專用驅動510.06_gameready_win11_win10-dch_64bit_international,然后直接在win終端輸入:

wsl --set-default-version 2

此時就默認使用WSl2了其垄。

如果著急看WSL2能不能用可以直接在WIN跑下這個:

docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark               
---
result:
---
GPU Device 0: "Ampere" with compute capability 8.6

> Compute 8.6 CUDA device: [NVIDIA GeForce RTX 3050 Ti Laptop GPU]
20480 bodies, total time for 10 iterations: 40.139 ms
= 104.495 billion interactions per second
= 2089.903 single-precision GFLOP/s at 20 flops per interaction

輸出正常的話苛蒲,就證明WSL-NVIDIA驅動和你的顯卡都能正確檢測到。

安裝Ubuntu

接下來安裝Ubuntu試試绿满,一般網上都是建議在Microsoft Store中搜索安裝臂外,不過如果直接在WIN11的商店中搜索Ubuntu,會給你直接安裝到C盤棒口,這點很煩寄月,我也是一不小心就將Ubuntu鏡像搞到了C盤,無奈只能先刪掉无牵,然后將WSL2中的docker綁定解綁漾肮,然后移到其他盤中(這里我移動到了D盤):

wsl --export docker-desktop-data D:\Docker\wsl\docker-desktop-data\docker-desktop-data.tar
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data D:\Docker\wsl\docker-desktop-data\ D:\Docker\wsl\docker-desktop-data\docker-desktop-data.tar --version 2

docker鏡像地址移到其他盤后,就可以放開手搞鏡像了茎毁!

基于wsl2的docker鏡像

既然都是鏡像克懊,為啥不直接找一個帶有cuda環(huán)境的鏡像呢,直接在docker官網或者NVIDIA-docker就可以搜到:nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04七蜘,然后docker拉一下就行

于是谭溉,我在wsl2中注銷掉了之前的Ubuntu鏡像,wsl --unregister Ubuntu橡卤,并且刪除之前的鏡像扮念。然后docker pull nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04拉取新的鏡像。

運行一下試試碧库,執(zhí)行docker run -it --gpus all 42a32a65aa9d /usr/bin/bash柜与,注意要把--gpus all加上巧勤,不然會檢測不到顯卡。

進入容器內部執(zhí)行nvidia-smi

root@304af4811a38:/# nvidia-smi
Sun Jan 30 10:37:28 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.39.01    Driver Version: 511.23       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0 Off |                  N/A |
| N/A   51C    P8     8W /  N/A |      0MiB /  4096MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

嗯弄匕,沒毛病颅悉。

測試CUDA

編譯https://github.com/NVIDIA/cuda-samples中的代碼,然后跑個deviceQuery:

root@0b09ee5e9284:~/code/cuda-samples/bin/x86_64/linux/release# ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA GeForce RTX 3050 Ti Laptop GPU"
  CUDA Driver Version / Runtime Version          11.6 / 11.4
  CUDA Capability Major/Minor version number:    8.6
  Total amount of global memory:                 4096 MBytes (4294443008 bytes)
  (020) Multiprocessors, (128) CUDA Cores/MP:    2560 CUDA Cores
  GPU Max Clock rate:                            1035 MHz (1.03 GHz)
  Memory Clock rate:                             5501 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 2097152 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
  Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total shared memory per multiprocessor:        102400 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1536
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Managed Memory:                Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      No
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.6, CUDA Runtime Version = 11.4, NumDevs = 1
Result = PASS

可以正常檢測出卡迁匠,也可以正常運行剩瓶。

再跑一個簡單的矩陣乘法:

root@0b09ee5e9284:~/code/cuda-samples/bin/x86_64/linux/release# ./matrixMul
[Matrix Multiply Using CUDA] - Starting...
GPU Device 0: "Ampere" with compute capability 8.6

MatrixA(320,320), MatrixB(640,320)
Computing result using CUDA Kernel...
done
Performance= 294.72 GFlop/s, Time= 0.445 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
Checking computed result for correctness: Result = PASS

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

嗯,也沒毛病城丧。

編譯tvm測試

簡單在WSL2下和在雙系統(tǒng)Ubuntu下進行編譯TVM測試延曙,tvm版本用GITHUB上779dc51e1332f417fa4c304b595ce76891dfc33a這個commit進行測試,win端調整到rog的性能模式芙贫,Ubuntu系統(tǒng)沒有額外設置搂鲫,cmake的設置相同,都使用ninja j8命令進行編譯磺平。

WSL2和Ubuntu編譯TVM差30s魂仍,將近2%吧,相差不是很大拣挪。其實這個對比不是很標準哈擦酌,兩個系統(tǒng)的CPU最高頻率沒有統(tǒng)一,只是簡單測測吧~

搭配VSCODE

使用VSCODE開發(fā)已經是很稀松平常的事兒了菠劝,VSCODE有個remote-SSH插件可以讓我們很方便地連接遠程服務器進行開發(fā)赊舶,就和本地服務一樣。

同樣的赶诊,VSCODE中也有一個插件直接可以連接WSL2下的docker笼平,在windows下docekr run之后,就可以在win下的vscode中找到這個docker容器:

wsl2-docker容器

執(zhí)行Attach Vscode之后就可以進入VSCODE的docker環(huán)境:

vscode的wsl2-docker環(huán)境

開發(fā)就和在Ubuntu下的VSCODE一模一樣舔痪,有root權限寓调,可以裝插件,可以調試代碼锄码,想干啥就干啥夺英。

到目前為止WSL2在WIN11上的開發(fā)一切順利~

WIN11到底好不好用

剛拿到這個筆記本時是WIN10,也沒有升級WIN11的想法滋捶,不過因為在win10中使用WSL2比較麻煩痛悯,而WIN11自帶wsl2。于是乎就升級了一波WIN11重窟。

整個升級過程比想象中順滑载萌,在設置里頭點點點就可以直接升級,下載更新、重啟一氣呵成扭仁,重啟后就是新系統(tǒng)了可缚,之前的所有軟件都能用。

據說WIN11相比WIN10在CPU調度會差一點斋枢,打游戲會比較影響。不過我感覺不出來知给,使用上比WIN10界面好看些瓤帚,其他核心操作和WIN10相差不大,對于觸屏用戶更友好些涩赢。

令我比較驚喜的是WIN11自帶了類似MAC端付費應用Paste的核心功能戈次,Win+V可以直接展示最近的剪切板隨便選擇粘貼,圖片也是可以的筒扒。

WIN11自帶paste

遇到的問題

有一個比較坑的問題怯邪,本來win11+Ubuntu20.04雙系統(tǒng)用的好好的,突然有一天華碩讓升級bios(從407->408)花墩,當時沒有什么想法就直接升級了悬秉。升級完直接傻眼,發(fā)現進不去ubuntu系統(tǒng)了冰蘑,而win11系統(tǒng)沒啥問題和泌。

以為是引導的問題,修改了半天grub引導祠肥,通過u盤ubuntu安裝器fix-boot后也不行武氓,試了種種方式都進不去,差點就要重裝了仇箱。

最后偶然在reddit上查了下貌似是408版本不兼容ubuntu-20.04县恕,直接降級bios就好了。

相關問題鏈接:

華碩bios下載官網:

使用lldb

用clang編譯后的文件想要在VSCODE中debug剂桥,需要下一個codeLLDB忠烛,然后json中配置:

{
    "type": "lldb",
    "request": "launch",
    "name": "lldb launch",
    "program": "/path/to/a.out",
},

就可以了~

3080拓展塢

因為幻13可以通過專用的PCIE拓展口連接自己的拓展塢顯卡,傳輸速率比雷電4要快不少渊额,外接顯卡幾乎可以無損况木。于是在日亞上淘了個3080的顯卡塢,7300+800的稅旬迹,等了一個月終于到了火惊。

幻13和顯卡塢

首先這不是真正的桌面版RTX3080。這是rtx3070桌面版ga104核心的滿血版奔垦。多了一些cuda核心而已屹耐。因為功耗限制,實際上比桌面版3070還要慢,也就是略弱于桌面端3070惶岭。不過我買這個主要是看重其16G的顯存寿弱,真的很適合煉丹啊~

筆記本3080顯卡

看大石頭的評測,這個3080顯卡塢在和幻13極限雙烤開增強模式按灶,GPU可以跑到150w溫度82度症革,CPU可以跑到45W溫度95度,說實話這溫度有點高鸯旁,如果自己平時使用的話還是建議調低點噪矛,畢竟這玩意兒比較嬌貴。

3080顯卡塢z

有一點肯定要清楚铺罢,這顯卡的性能和功耗是成正比的艇挨,不管是桌面級、筆記本還是嵌入式的顯卡韭赘,都是功耗越強性能越強缩滨。

另外,在WIN11端切換3080顯卡之后泉瞻,重啟成Ubuntu直接就識別為3080了脉漏,爽。

幻13完全體

桌面配置

借著這次嘮叨袖牙,順便說下咱們不常見的屏幕掛燈鸠删,一開始想到用掛燈的場景是墨水屏,因為墨水屏不會發(fā)光贼陶,在白天還好刃泡,但是晚上就沒法用了,雖然可以使用臺燈照著碉怔,但是光不均勻或者說照不全烘贴,比如這樣:

僅靠臺燈照射的桌面環(huán)境

上面就是僅使用臺燈的樣子,上面的屏幕掛燈還沒有開撮胧,這樣辦公太難受了桨踪。

如果開了屏幕掛燈的話:

僅開屏幕燈的桌面環(huán)境

可以看到墨水屏被照亮了很多...另外桌面也照亮了,臺燈關了也無所謂芹啥,只有掛燈锻离,看書沒有任何問題。

這個燈是明基的Screenbar Halo墓怀,話說都配這么貴的墨水屏顯示器了汽纠,不差一個掛燈了,之前用的小米的傀履,感覺亮度有點不夠虱朵,索性就配了個比較好的掛燈了。相比小米肯定高級很多哈,亮度提升了不少碴犬,最高亮度需要大電流的輸出才行(1A有點勉強絮宁,1.5A-2A差不多),之前的小米就不用(因為沒有那么亮)服协,我掛了個充電寶就沒任何問題了绍昂。

不過說實話貌似屏幕掛燈不是這么用的,人家是為了給你個環(huán)境光偿荷,照亮桌面治专,可以看書又不占地方,關鍵的是這個燈是非對稱的(咱也不懂)遭顶,就是不會照到普通的屏幕上給你反光(普通的屏幕是會發(fā)光的,和我這個墨水屏還不一樣)泪蔫,但其實我是想讓這個掛燈照到我的屏幕上的(因為墨水屏不發(fā)光嘛)棒旗,但是我正常使用掛燈(明基這個)就照不到屏幕,這個確實不錯撩荣,畢竟屏幕掛燈本應該不照屏幕以防反光铣揉。然后我只能強行調整一下掛燈的方向,讓它盡量照我的屏幕餐曹,感覺有點為難人家逛拱。

我也拿普通屏幕試了試:

平常情況下的屏幕掛燈

無論是上面的還是下面的屏幕都不反光,看的很清楚台猴,簡直太棒了~看代碼打游戲啥的沒有任何問題朽合,感覺普通屏幕,使用掛燈饱狂,讓周圍環(huán)境光充足起來曹步,這樣眼睛就不會太容易疲勞了

畢竟算是生產力了休讳,屏幕掛燈用了就不會回去了讲婚。

這篇就講這么多吧,下一篇就還是大家熟悉的技術文了~

參考資料

撩我吧

  • 如果你與我志同道合于此俊柔,老潘很愿意與你交流筹麸!
  • 如果你喜歡老潘的內容,歡迎關注和支持~
  • 如果有問題想要聯系我雏婶,可加公眾號直接私信物赶,點這里
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末留晚,一起剝皮案震驚了整個濱河市块差,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖憨闰,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状蜗,死亡現場離奇詭異,居然都是意外死亡鹉动,警方通過查閱死者的電腦和手機轧坎,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泽示,“玉大人缸血,你說我怎么就攤上這事⌒瞪福” “怎么了捎泻?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長埋哟。 經常有香客問我笆豁,道長,這世上最難降的妖魔是什么赤赊? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任闯狱,我火速辦了婚禮,結果婚禮上抛计,老公的妹妹穿的比我還像新娘哄孤。我一直安慰自己,他們只是感情好吹截,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布瘦陈。 她就那樣靜靜地躺著,像睡著了一般波俄。 火紅的嫁衣襯著肌膚如雪双饥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天弟断,我揣著相機與錄音咏花,去河邊找鬼。 笑死阀趴,一個胖子當著我的面吹牛昏翰,可吹牛的內容都是我干的。 我是一名探鬼主播刘急,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼棚菊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叔汁?” 一聲冷哼從身側響起统求,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤检碗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后码邻,有當地人在樹林里發(fā)現了一具尸體折剃,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年像屋,在試婚紗的時候發(fā)現自己被綠了怕犁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡己莺,死狀恐怖奏甫,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情凌受,我是刑警寧澤阵子,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站胜蛉,受9級特大地震影響挠进,放射性物質發(fā)生泄漏。R本人自食惡果不足惜腾么,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杈湾。 院中可真熱鬧解虱,春花似錦、人聲如沸漆撞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浮驳。三九已至悍汛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間至会,已是汗流浹背离咐。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奉件,地道東北人宵蛀。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像县貌,于是被迫代替她去往敵國和親术陶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容