diff --git a/_posts/2024-04-11-inotify-watcher-leaks-in-kubelet.md b/_posts/2024-04-11-inotify-watcher-leaks-in-kubelet.md index 45359c8..9a7e2dc 100644 --- a/_posts/2024-04-11-inotify-watcher-leaks-in-kubelet.md +++ b/_posts/2024-04-11-inotify-watcher-leaks-in-kubelet.md @@ -77,7 +77,7 @@ Inode Pathname 258855 /etc/srv/kubernetes/pki/ca-certificates.crt ``` -Put all processes above into one single script, I can retrieve all target files, that would help to understand if there's a real leakage. Also, I count the unique inode amount, this could also help to know which inode are monitored multiple times. +Put all processes above into one single script(please see the [updated version in the appendix](#updated-script-to-get-inotify-watchers-initiated-by-kubelet)), I can retrieve all target files, that would help to understand if there's a real leakage. Also, I count the unique inode amount, this could also help to know which inode are monitored multiple times. ```bash cat << EOF | sudo tee -a test.sh @@ -149,6 +149,62 @@ This turns things easy, because I can just use pod ID to compare between running - [How Kubelet leaked inotify watchers?]() - [debugfs]() +## Appendix + +### Updated script to get inotify watchers initiated by kubelet + +Thanks for [yujuhong@](https://github.com/yujuhong)'s momentum and helps in finishing updated script. + +```bash +PID=$(echo $(ps -aux | grep "/home/kubernetes/bin/kubelet" | head -1) | cut -d " " -f 2) +echo "Kubelet Pid:" ${PID} + +inums_raw=$(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify) +# echo ${inums_raw} +echo "Count: $(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify | wc -l)" + +while read -r line; +do + reg="ino:([0-9a-f]*) sdev:([0-9a-f]*)" + if [[ ${line} =~ $reg ]]; then + ino="${BASH_REMATCH[1]}" + sdev="${BASH_REMATCH[2]}" + # echo $ino $sdev + else + echo "wrong line" + fi + + sdev_in_dec=$((16#$sdev)) + minor=$((sdev_in_dec % 256)) + major=$((sdev_in_dec / 256)) + # echo "${major}:${minor}" + + in_fds_sdev+=("${ino}-${major}:${minor}") +done <<< "${inums_raw}" + +uniq_pairs=($(echo "${in_fds_sdev[@]}" | sort | uniq)) +echo "Unique target" ${#uniq_pairs[@]} + +printf "%-10s %-10s %-6s %s\n" "INUM" "DEV" "COUNT" "TARGET" +for pair in "${uniq_pairs[@]}" +do + count=$(echo "${in_fds_sdev[@]}" | grep -o "${pair}" | wc -l) + fd_hex=$(echo ${pair} | cut -d "-" -f 1) + dev=$(echo ${pair} | cut -d "-" -f 2) + fd_dec="$((16#${fd_hex}))" + + mount_info=$(grep ${dev} /proc/$PID/mountinfo) + if [[ -z $mount_info ]]; then + echo "Can't find mount info for" $dev + else + tmpfs_path=$(echo $mount_info | cut -d " " -f 5) + # echo $tmpfs_path + loc=$(find ${tmpfs_path} -inum ${fd_dec}) + printf "%-10s %-10s %-6s %s\n" "${fd_dec}" "${dev}" "${count}" "${loc}" + fi +done +``` + ## References [^flbit_ino]: [Fluentbit error "cannot adjust chunk size" on GKE](https://stackoverflow.com/a/76712244) diff --git a/_site/feed.xml b/_site/feed.xml index 37f41c0..15dcbcc 100644 --- a/_site/feed.xml +++ b/_site/feed.xml @@ -1,5 +1,5 @@ -Jekyll2024-04-24T00:31:42-04:00https://blog.pengzhan.dev/feed.xmlSTSDMy personal blog, some contents are useful, the others are not. Just like my mediocre life. -Pengzhan Haohaopengzhan@gmail.comInotify watcher leaks in Kubelet2024-04-18T16:35:00-04:002024-04-18T21:14:15-04:00https://blog.pengzhan.dev/posts/inotify-watcher-leaks-in-kubeletSymptom +Jekyll2024-04-24T01:01:24-04:00https://blog.pengzhan.dev/feed.xmlSTSDMy personal blog, some contents are useful, the others are not. Just like my mediocre life. +Pengzhan Haohaopengzhan@gmail.comInotify watcher leaks in Kubelet2024-04-18T16:35:00-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/inotify-watcher-leaks-in-kubeletSymptom

Recently, I faced an issue where Kubelet on a node reported error message failed to create file descriptors.

error creating file watcher: too many open files
@@ -61,7 +61,7 @@ Inode	Pathname
 258855	/etc/srv/kubernetes/pki/ca-certificates.crt
 
-

Put all processes above into one single script, I can retrieve all target files, that would help to understand if there’s a real leakage. Also, I count the unique inode amount, this could also help to know which inode are monitored multiple times.

+

Put all processes above into one single script(please see the updated version in the appendix), I can retrieve all target files, that would help to understand if there’s a real leakage. Also, I count the unique inode amount, this could also help to know which inode are monitored multiple times.

cat << EOF | sudo tee -a test.sh
 echo "kubelet pid="${PID}
@@ -134,6 +134,61 @@ Count: 7491
   
  • debugfs
  • +

    Appendix

    + +

    Updated script to get inotify watchers initiated by kubelet

    + +

    Thanks for yujuhong@’s momentum and helps in finishing updated script.

    + +
    PID=$(echo $(ps -aux | grep "/home/kubernetes/bin/kubelet" | head -1) |  cut -d " " -f 2)
    +echo "Kubelet Pid:" ${PID}
    +
    +inums_raw=$(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify)
    +# echo ${inums_raw}
    +echo "Count: $(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify | wc -l)"
    +
    +while read -r line;
    +do
    +        reg="ino:([0-9a-f]*) sdev:([0-9a-f]*)"
    +        if [[ ${line} =~ $reg ]]; then
    +                ino="${BASH_REMATCH[1]}"
    +                sdev="${BASH_REMATCH[2]}"
    +                # echo $ino $sdev
    +        else
    +                echo "wrong line"
    +        fi
    +
    +        sdev_in_dec=$((16#$sdev))
    +        minor=$((sdev_in_dec % 256))
    +        major=$((sdev_in_dec / 256))
    +        # echo "${major}:${minor}"
    +
    +        in_fds_sdev+=("${ino}-${major}:${minor}")
    +done <<< "${inums_raw}"
    +
    +uniq_pairs=($(echo "${in_fds_sdev[@]}" | sort | uniq))
    +echo "Unique target" ${#uniq_pairs[@]}
    +
    +printf "%-10s %-10s %-6s %s\n" "INUM" "DEV" "COUNT" "TARGET"
    +for pair in "${uniq_pairs[@]}"
    +do
    +        count=$(echo "${in_fds_sdev[@]}" | grep -o "${pair}" | wc -l)
    +        fd_hex=$(echo ${pair} | cut -d "-" -f 1)
    +        dev=$(echo ${pair} | cut -d "-" -f 2)
    +        fd_dec="$((16#${fd_hex}))"
    +
    +        mount_info=$(grep ${dev} /proc/$PID/mountinfo)
    +        if [[ -z $mount_info ]]; then
    +                echo "Can't find mount info for" $dev
    +        else
    +                tmpfs_path=$(echo $mount_info | cut -d " " -f 5)
    +                # echo $tmpfs_path
    +                loc=$(find ${tmpfs_path} -inum ${fd_dec})
    +                printf "%-10s %-10s %-6s %s\n" "${fd_dec}" "${dev}" "${count}" "${loc}"
    +        fi
    +done
    +
    +

    References

    @@ -145,7 +200,7 @@ Count: 7491

    proc(5) 

    -
    ]]>Pengzhan HaoDebug Kubelet2024-04-10T03:34:00-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/Debug-kubeletDebug logs +
    ]]>Pengzhan HaoDebug Kubelet2024-04-10T03:34:00-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/Debug-kubeletDebug logs

    Like all others program’s debugging, the most straightforward way for newbies and the easiest way for advanced developer is relying on logs. Same to debug kubelet, bumping up verbosity to show more logs is the most intuitive approach when facing an issue. Like most component in Kubernetes, kubelet uses klog for logging and there are 10 verbosity levels(0-9).

    @@ -211,7 +266,7 @@ Count: 7491

    By the time, this note was written. In kubelet related code, level 8 was only used in pkg/kubelet/prober/prober_manager.go and level 7 was only used in pkg/kubelet/logs/container_log_manager.go. And there are 11 occurrences that level 6 was used, and all of them are not part of workload lifecycle related.

    Further readings

    -

    Inotify watcher leaks in Kubelet

    ]]>
    Pengzhan Hao
    Labs of CS3502022-02-22T16:08:17-05:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/cs350-labsThis will be a series regarding lab I gave during the spring 2022 semester.

    +

    Inotify watcher leaks in Kubelet

    ]]>
    Pengzhan Hao
    Labs of CS3502022-02-22T16:08:17-05:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/cs350-labsThis will be a series regarding lab I gave during the spring 2022 semester.

    The reason why I am writing this down is because it has been a week and no students ask for the solution of the last Lab. I realise that learning gap between students are huge, especially when a non-profit university is admitting more and more students. @@ -567,7 +622,7 @@ It’s time to switch from the running scheduler to the selected process. Wait f

    3 objcopy - binutils mannual 

    -
    ]]>
    Pengzhan Hao
    EDDL: How do we train neural networks on limited edge devices - PART 22021-10-31T13:01:14-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices-part2In the last post, part1, our idea of distributed learning on edge environment was generally addressed. +]]>Pengzhan HaoEDDL: How do we train neural networks on limited edge devices - PART 22021-10-31T13:01:14-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices-part2In the last post, part1, our idea of distributed learning on edge environment was generally addressed. I introduced the reason why edge distributed learning is needed and what improvements it can achieve. In this post, I will talk about our motivation study and how our framework works.

    @@ -671,7 +726,7 @@ The other platform is the Dlib, a C++ library that provides implementations for a wide range of machine learning algorithms. -We chose the Dlib library because it is written in C/C++, and can be easily and natively used in embedded devices.

    ]]>
    Pengzhan Hao
    EDDL: How do we train neural networks on limited edge devices - PART 12021-10-13T16:53:20-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devicesThis post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment.” was published. +We chose the Dlib library because it is written in C/C++, and can be easily and natively used in embedded devices.

    ]]>
    Pengzhan Hao
    EDDL: How do we train neural networks on limited edge devices - PART 12021-10-13T16:53:20-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devicesThis post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment.” was published. As the first part of the introductions, I focus only on the motivation and summary of our works. More details in design and implementation can be found in late posts.

    @@ -748,7 +803,7 @@ Smartly schedule work balance and handle join/exit issues also need under consid Devices with sufficient bandwidth can also work as virtual leader devices. This approach helps minimize physical devices we used and more leaders can further scale up workers’ limits.

    -]]>
    Pengzhan Hao
    Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries2020-09-15T22:00:14-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenciLet’s generate a word cloud like this. +]]>Pengzhan HaoGenerate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries2020-09-15T22:00:14-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenciLet’s generate a word cloud like this. Don’t understand the language is not a big deal. If your written language is based on latin alphabet(or other language has space between words), skip tokenization.

    @@ -907,7 +962,7 @@ If your written language is based on latin alphabet(or other language has space

    -

    This generated word cloud figure reflects the most popular economy news’ keyword in the week started 06-28-2020. Two largest words in the figure are “新冠” and “新冠病毒”, both means “Covid-19” (This figure was in the week of the second covid spur in Beijing, China). The size of the image fits my phone screen and I can use an app to automatic sync it to my phone’s wallpaper. However, in this image, too many location nouns are presented. This will be something I can make progress on in the future.

    ]]>
    Pengzhan Hao
    Xv6 introduction2017-07-28T14:56:55-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/intro-xv6In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes. +

    This generated word cloud figure reflects the most popular economy news’ keyword in the week started 06-28-2020. Two largest words in the figure are “新冠” and “新冠病毒”, both means “Covid-19” (This figure was in the week of the second covid spur in Beijing, China). The size of the image fits my phone screen and I can use an app to automatic sync it to my phone’s wallpaper. However, in this image, too many location nouns are presented. This will be something I can make progress on in the future.

    ]]>
    Pengzhan Hao
    Xv6 introduction2017-07-28T14:56:55-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/intro-xv6In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes. Understand system call and know how to implement a simple one will be coved as the first half. In the second half of this post, I will discuss a little bit more on how to debug xv6 using gdb.

    @@ -982,7 +1037,7 @@ Using ssh may connect to different physical devices under same domain name, this
    target remote localhost:28467
     # target remote [ip-addr]:28467
    -
    ]]>
    Pengzhan Hao
    Some of my previews experiment works: 20162016-10-28T12:27:33-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/some-of-my-previews-exper-workThis blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics. +
    ]]>
    Pengzhan Hao
    Some of my previews experiment works: 20162016-10-28T12:27:33-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/some-of-my-previews-exper-workThis blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.

    2016-10

    @@ -1092,7 +1147,7 @@ unxz ubuntu-14.04lts-xubuntu-odroid-xu-20140714.img.xz # dump file su dd if=/dev/block/mmcblk0p37 of=/sdcard/boot.img -]]>
    Pengzhan Hao
    Using charles proxy to monitor mobile SSL traffics2016-10-27T22:50:33-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/charles-is-not-a-good-toolIn this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn’t provide us a method to modify their own certs. For these situation, I still didn’t find a good solutions for it. But I’ll keep updating this if I get one.
    +]]>
    Pengzhan Hao
    Using charles proxy to monitor mobile SSL traffics2016-10-27T22:50:33-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/charles-is-not-a-good-toolIn this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn’t provide us a method to modify their own certs. For these situation, I still didn’t find a good solutions for it. But I’ll keep updating this if I get one.
    My current solution is using AP to forward all SSL traffic to a proxy, charles proxy is my first choice (Prof asked). It’s a non-free software which still update new versions now. So mainly, I’ll talk about how to charles SSL proxy.

    @@ -1121,4 +1176,4 @@ You also need to save charles Root Certificate, it also contains in the same men
    • Set Proxy and SSL Proxy
    • -
    ]]>
    Pengzhan Hao
    STSD: Stop Talking Start Doing2016-10-26T22:50:33-04:002024-04-19T00:41:23-04:00https://blog.pengzhan.dev/posts/welcome-to-my-blogPengzhan Haohaopengzhan@gmail.com
    \ No newline at end of file +]]>Pengzhan HaoSTSD: Stop Talking Start Doing2016-10-26T22:50:33-04:002024-04-24T00:32:03-04:00https://blog.pengzhan.dev/posts/welcome-to-my-blogPengzhan Haohaopengzhan@gmail.com \ No newline at end of file diff --git a/_site/posts/charles-is-not-a-good-tool.html b/_site/posts/charles-is-not-a-good-tool.html index 9eb3fdb..c8bf237 100644 --- a/_site/posts/charles-is-not-a-good-tool.html +++ b/_site/posts/charles-is-not-a-good-tool.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2016-10-27T22:50:33-04:00","description":"In this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn’t provide us a method to modify their own certs. For these situation, I still didn’t find a good solutions for it. But I’ll keep updating this if I get one. My current solution is using AP to forward all SSL traffic to a proxy, charles proxy is my first choice (Prof asked). It’s a non-free software which still update new versions now. So mainly, I’ll talk about how to charles SSL proxy.","headline":"Using charles proxy to monitor mobile SSL traffics","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"},"url":"https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"} diff --git a/_site/posts/eddl-how-do-we-train-on-limited-edge-devices-part2.html b/_site/posts/eddl-how-do-we-train-on-limited-edge-devices-part2.html index b9f3d2d..96bd3f0 100644 --- a/_site/posts/eddl-how-do-we-train-on-limited-edge-devices-part2.html +++ b/_site/posts/eddl-how-do-we-train-on-limited-edge-devices-part2.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2021-10-31T13:01:14-04:00","description":"In the last post, part1, our idea of distributed learning on edge environment was generally addressed. I introduced the reason why edge distributed learning is needed and what improvements it can achieve. In this post, I will talk about our motivation study and how our framework works. How does data support us training on edge? Before designing and implementing our framework, we first need confirmation that training on edge resource-limited devices is worthwhile. We were using a malware detection neural network to show why a small, customized neural network is better. We collected 32000+ mobile apps feature as global data. With these data records, we trained a multilayer perceptron called “PerNet” to determine whether a given feature belongs to a benign or malware app. We called this detection. As well, PerNet can also classify malware apps into different types of attacks. We called this classification. The global model can achieve 93% above recall rate and 96.93% above accuracy. With all these data, we selected two community app usage sub-dataset for local model generations. Large categories (Scenario 1) We chose the 5 largest categories of apps, including entertainment, tools, brain&Puzzle, Lifestyle, and Education, as well as the 5 largest malware categories. All together, 12000+ apps were included in this sub-dataset, almost 50 to 50 between benign and malware. Campus-community categories (Scenario 2) We chose the 5 most downloaded categories from college students as benign groups, as well as a similar amount of 5 malware categories. To ensure that malware apps are included in 5 benign categories, we also considered synthesizing some other malware apps within categories of 5 most downloaded(benign) categories. With these two types of sub-dataset, we used the same PerNet to generate multiple local models. Under each scenarios experiment, we compared global and local models on the preserved test dataset. In all classification performances, local beat global in every scenario. In detection performances, local also share the same accuracy as global does. In summary, local models were trained on special occasions. Under the same circumstance, a global model can achieve no better accuracy than local models. The reason why local is better might be because of overfitting. I believe this issue also be considered in the machine learning communities that they brought transfer learning, a technique to optimize global models to special scenarios but performing more training to a global model once it’s shipped to local. Design and Implementation Overall design The basic EDDL distributed training setup consists of 3 parts. EDDL training cluster, a device cluster that consists of edge or mobile devices that are participating in training. EDDL manager, the initial driver program that works as collect training data, relay data to training devices and initial training clusters. Training data entry (TDE), a data storage for all training data. Dynamic training data distribution Existing distributed DNN training solutions usually statically partition training data among workers. It can be a problem when the training node joins and exits. We designed our framework that can dynamically distribute training data during learning. Before every training batch started, a batch of TDE will be sent to devices. In our experiments, we found that by applying this design, overall training time was shortened by doing. Especially in large amount devices cases, this optimization can be 50% less than statically divided. Scaling up cluster size Our framework was designed to have both sync and async parameter aggregation. Asynchronous aggregation can allow a high outcome of training batch but with a sacrifice or converge time. Synchronous aggregation allows a quick converge time in epochs, however can’t ensure performance when there’s a struggler worker. As showed in experiments, we chose sync as default because the converging time is dominant in overall training time. But, we also considered the possibilities of that async with more workers can achieve similar overall training time. We introduced a formula to determine whether adding more training nodes can help or not. Here we used bandwidth usage coefficient (BUC) as [BUC = \\dfrac{n}{T_{sync}}] In this formula, \\(n\\) is the number of devices, and \\(T_{sync}\\) is the transmission time of parameters. With an increasing number of workers, n increase linearly but transmission time does not. When \\(BUC\\) increases, the cluster can speed up training time by adding workers. Otherwise, adding more workers won’t help with overall training time. Adaptive leader role splitting The idea of role splitting is simple that a device can work as a worker as well leader. The advantage of doing this is straightforward that we can transfer 1 less parameter and training time will be shortened. However, in our current settings, it can’t perform much better help since only 1 leader role is in a cluster. We can benefit from this in our future works. Overall architecture Details were given in the image. Prototype hardware and software EDDL was designed to be run on two single-board computer embedded platforms. One such platform is ODROID-XU4, which is equipped with a 2.1/1.4 GHz 32-bit ARM processor and 2GB memory. The other platform is the Raspberry Pi 3 Model B board, which comes with an ARM 1.2 GHz 64-bit quad-core processor and 1GB memory. The operating system running on the above platforms is Ubuntu 18.04 with Linux kernel 4.14. We used Dlib, a C++ library that provides implementations for a wide range of machine learning algorithms. We chose the Dlib library because it is written in C/C++, and can be easily and natively used in embedded devices.","headline":"EDDL: How do we train neural networks on limited edge devices - PART 2","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices-part2"},"url":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices-part2"} diff --git a/_site/posts/eddl-how-do-we-train-on-limited-edge-devices.html b/_site/posts/eddl-how-do-we-train-on-limited-edge-devices.html index cdc8544..77c99e7 100644 --- a/_site/posts/eddl-how-do-we-train-on-limited-edge-devices.html +++ b/_site/posts/eddl-how-do-we-train-on-limited-edge-devices.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2021-10-13T16:53:20-04:00","description":"This post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment.” was published. As the first part of the introductions, I focus only on the motivation and summary of our works. More details in design and implementation can be found in late posts.","headline":"EDDL: How do we train neural networks on limited edge devices - PART 1","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"},"url":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"} diff --git a/_site/posts/generate-word-cloud-with-chinese-fenci.html b/_site/posts/generate-word-cloud-with-chinese-fenci.html index 617ce24..e9e4f64 100644 --- a/_site/posts/generate-word-cloud-with-chinese-fenci.html +++ b/_site/posts/generate-word-cloud-with-chinese-fenci.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2020-09-15T22:00:14-04:00","description":"Let’s generate a word cloud like this. Don’t understand the language is not a big deal. If your written language is based on latin alphabet(or other language has space between words), skip tokenization.","headline":"Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"},"url":"https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"} diff --git a/_site/posts/intro-xv6.html b/_site/posts/intro-xv6.html index cbd5a81..09c6c58 100644 --- a/_site/posts/intro-xv6.html +++ b/_site/posts/intro-xv6.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2017-07-28T14:56:55-04:00","description":"In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes. Understand system call and know how to implement a simple one will be coved as the first half. In the second half of this post, I will discuss a little bit more on how to debug xv6 using gdb.","headline":"Xv6 introduction","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/intro-xv6"},"url":"https://blog.pengzhan.dev/posts/intro-xv6"} diff --git a/_site/posts/some-of-my-previews-exper-work.html b/_site/posts/some-of-my-previews-exper-work.html index 6f422e2..ae93c65 100644 --- a/_site/posts/some-of-my-previews-exper-work.html +++ b/_site/posts/some-of-my-previews-exper-work.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2016-10-28T12:27:33-04:00","description":"This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.","headline":"Some of my previews experiment works: 2016","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"},"url":"https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"} diff --git a/_site/posts/welcome-to-my-blog.html b/_site/posts/welcome-to-my-blog.html index 27ed824..ea31992 100644 --- a/_site/posts/welcome-to-my-blog.html +++ b/_site/posts/welcome-to-my-blog.html @@ -34,7 +34,7 @@ +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2016-10-26T22:50:33-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD: Stop Talking Start Doing","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/welcome-to-my-blog"},"url":"https://blog.pengzhan.dev/posts/welcome-to-my-blog"} diff --git a/_site/sitemap.xml b/_site/sitemap.xml index 4c1056d..46d6a36 100644 --- a/_site/sitemap.xml +++ b/_site/sitemap.xml @@ -2,43 +2,43 @@ https://blog.pengzhan.dev/posts/welcome-to-my-blog -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/intro-xv6 -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices-part2 -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/cs350-labs -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/Debug-kubelet -2024-04-19T00:41:23-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/posts/inotify-watcher-leaks-in-kubelet -2024-04-18T21:14:15-04:00 +2024-04-24T00:32:03-04:00 https://blog.pengzhan.dev/archive