{"id":560,"date":"2024-08-28T08:33:51","date_gmt":"2024-08-28T07:33:51","guid":{"rendered":"https:\/\/www.alanknipmeyer.phd\/?p=560"},"modified":"2024-08-28T08:33:51","modified_gmt":"2024-08-28T07:33:51","slug":"building-a-gpu-server-for-a-home-lab","status":"publish","type":"post","link":"https:\/\/www.alanknipmeyer.phd\/index.php\/2024\/08\/28\/building-a-gpu-server-for-a-home-lab\/","title":{"rendered":"Building a GPU Server for a home-lab"},"content":{"rendered":"\n<p>When I was completing my masters thesis, I used EC2 Machine p3 instances along side my &#8216;on prem&#8217; devices. As I was moving various code\/models all the time these instances where on, the bills where racking up &#8211; sure it was great to have such powerful GPU&#8217;s on demand and I could easily setup EKS (Kubernetes) with GPU nodes via IaC and CI\/CD Tooling, but when the bill arrived it brought home how important it is to have good MLOps methodologies in having efficient use of delivering models for production usage.<\/p>\n\n\n\n<p>Not wanting to incur such regular costs and knowing i would need a server for at least the next 2 to 3 years, I explored how I could improve upon my &#8216;on prem&#8217; setup, which consisted of a ASUS Tuf gaming laptop with a RTX-3050 and 4G of NVRAM and a Server Tower with a RTX-2080 with 12G of RAM.<\/p>\n\n\n\n<p>What I needed was a GPU(s) that was good at inference and a training, with enough capacity to hold the models I am developing and some of the widely used LLM&#8217;s available. Doing some research it became apparent that the Dell R720 was a server built for hosting graphics cards and the NVIDIA P100 &amp; P40 where good matches for my research requirements.<\/p>\n\n\n\n<p>Alot of help came from the &#8216;the data daddi&#8217; you tube channel,  his videos are pretty well put together and easy to follow.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"AI\/ML\/DL GPU Buying Guide 2024: Get the Most AI Power for Your Budget\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/YiX9p8A7LqE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Best GPUs for your Money &#8211; P100 &amp; P40 right at the end<\/figcaption><\/figure>\n\n\n\n<p>The best GPUs for your money video back by the extensive <a href=\"https:\/\/timdettmers.com\/2023\/01\/30\/which-gpu-for-deep-learning\/\">Tim Dettmers blog<\/a> provides a plethora of good choice and analytics in choosing a GPU &#8211; what was also good is that eBay had a seemingly good supply of both P40 and P100 GPUs at a reasonable price.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>GPU<\/td><td>Architecture<\/td><td>CUDA Cores<\/td><td>Memory (Gb)<\/td><\/tr><tr><td>P100<\/td><td>Pascal<\/td><td>3584<\/td><td>16<\/td><\/tr><tr><td>P40<\/td><td>Pascal<\/td><td>3840<\/td><td>24<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">GPUs<\/figcaption><\/figure>\n\n\n\n<p>The R720 was purchased refurbished, at a very affordable price from <a href=\"https:\/\/www.bargainhardware.co.uk\/dell-poweredge-r720-2u-rack-server-configure-to-order?ff=1&amp;fp=200259\">bargain hardware<\/a> which specializes in refurbished servers at affordable prices. They have a great range of hardware, such as storage arrays, various sizes of servers and all built to order.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"578\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-1024x578.png\" alt=\"\" class=\"wp-image-561\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-1024x578.png 1024w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-300x169.png 300w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-768x433.png 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-1536x866.png 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-2048x1155.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">R720 on bargain hardware &#8211; very affordable, very good quality<\/figcaption><\/figure>\n\n\n\n<p>I went for a minimal server build, starting with only 2 SAS Drives, but with sufficient CPU and Memory to test the GPU&#8217;s when installed. With the GPU&#8217;s capable of drawing up 300W each, getting the 1100W power supply was required. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"699\" height=\"1024\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-4-699x1024.png\" alt=\"\" class=\"wp-image-565\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-4-699x1024.png 699w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-4-205x300.png 205w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-4-768x1125.png 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-4.png 1036w\" sizes=\"(max-width: 699px) 100vw, 699px\" \/><figcaption class=\"wp-element-caption\">Dell R720 Server configuration<\/figcaption><\/figure>\n\n\n\n<p>The servers and GPU arrived very quickly, with the GPU&#8217;s arriving from China in under a week and the server built to specification in a similar amount of time. I was very impressed of the packing of both as can be seen in the pictures below.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"544\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_2999-1024x768.jpg\" alt=\"\" class=\"wp-image-544\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_2999-1024x768.jpg 1024w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_2999-300x225.jpg 300w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_2999-768x576.jpg 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_2999-1536x1152.jpg 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_2999-2048x1536.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">R720 packing<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"545\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3001-1024x768.jpg\" alt=\"\" class=\"wp-image-545\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3001-1024x768.jpg 1024w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3001-300x225.jpg 300w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3001-768x576.jpg 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3001-1536x1152.jpg 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3001-2048x1536.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">server foam protection<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"552\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3019-1024x768.jpg\" alt=\"\" class=\"wp-image-552\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3019-1024x768.jpg 1024w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3019-300x225.jpg 300w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3019-768x576.jpg 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3019-1536x1152.jpg 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3019-2048x1536.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">GPU&#8217;s well packed<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>I did have to source the correct cables and PCI riser for the 2nd slot. I found this on eBay and also reached out to bargain hardware, who whilst they didn&#8217;t list them on their website, did have them in stock, so was able to add 2 to my order (which you can see on top of the server in the picture)<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" data-id=\"556\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3024-768x1024.jpg\" alt=\"\" class=\"wp-image-556\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3024-768x1024.jpg 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3024-225x300.jpg 225w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3024-1152x1536.jpg 1152w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3024-1536x2048.jpg 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3024-scaled.jpg 1920w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">standard riser<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" data-id=\"558\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3026-768x1024.jpg\" alt=\"\" class=\"wp-image-558\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3026-768x1024.jpg 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3026-225x300.jpg 225w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3026-1152x1536.jpg 1152w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3026-1536x2048.jpg 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/IMG_3026-scaled.jpg 1920w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">more wattage<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p> Thanks to the instructional videos, its shown that the wiring output between the Dell risers and  NVIDIA GPU&#8217;s are not compatible with standard cables, so I had to source those. I was only able to find these via <a href=\"https:\/\/www.amazon.com\/dp\/B08N4BJL2J?ref=ppx_yo2ov_dt_b_fed_asin_title\">amazon.com<\/a> in the US, but again, shipping was very quick (under a week) and with no import duty.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"902\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-5-1024x902.png\" alt=\"\" class=\"wp-image-566\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-5-1024x902.png 1024w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-5-300x264.png 300w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-5-768x677.png 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-5.png 1058w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">GinTai 8(pin) to 8(pin) Power Cable Replacement for DELL R730 and Nvidia K80\/M40\/M60\/P40\/P100 PCIE GPU<\/figcaption><\/figure>\n\n\n\n<p> I could of modified the supplied cables which came with the GPU&#8217;s from China, but as I wanted the longevity and confidence that the cables would last a good amount of time, went for tested and manufactured to specification cables.<\/p>\n\n\n\n<p>With all the correct components and cables, I went about installing the graphics cards in the server. The DataDaddi video shows how to install a single P100, and for installing both i the P100 and P40 I worked from removing riser 1, and installing them with plenty of space in the server itself, although routing the cables was quite tricky!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Installing Tesla P100 GPU on Dell PowerEdge R720 Server with Driver Installation\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/fgTUHqCqFG8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Install P100 in R720<\/figcaption><\/figure>\n\n\n\n<p> I installed Ubuntu server image via USB easily enough, I would also advise not installing the drivers at initial install time, I found that the DKMS modules had either not built correctly and the nvidia-smi program was missing. This was easily resolved by removing the packages, rebooting and re-installing once the server was built.<\/p>\n\n\n\n<p>With the server up and running with the GPU&#8217;s I could order more storage. Ideally you should get as big and as fast as possible, but being on a budget I settled for the same SAS drives I had originally purchased. 6 more in a RAID 5 configuration saw my capacity increase to over 7.6Tb &#8211; configuring the drives on the R720 and the mini raid controller was pretty easy, it had been a while since I had done this on an actual server (any one remember sun storage arrays that used an Ultra 5 to mange them ?)<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"How to Configure a Virtual Drive ?!\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/uhbP6X6g4mI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Configure virtual drive on R720<\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>Filesystem                         Size  Used Avail Use% Mounted on\ntmpfs                               26G  2.4M   26G   1% \/run\n\/dev\/mapper\/ubuntu--vg-ubuntu--lv   98G   78G   15G  84% \/\ntmpfs                              126G     0  126G   0% \/dev\/shm\ntmpfs                              5.0M     0  5.0M   0% \/run\/lock\n\/dev\/sda2                          2.0G  244M  1.6G  14% \/boot\n\/dev\/mapper\/ubuntu--vg-lv--0       7.5T  108G  7.0T   2% \/data\ntmpfs                               26G   88K   26G   1% \/run\/user\/1000<\/code><\/pre>\n\n\n\n<p>I setup the IDRAC port so I could run the server headless, this was really useful as it really is a full blown virtual console, that can be used to go into the various BIOS screens, also once the server was built i could connect into the root console, but later added a desktop.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"iDRAC7 Setup and Access Guide on Dell PowerEdge R720 Server\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/A9C9BNHyDN8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">IDRAC Setup<\/figcaption><\/figure>\n\n\n\n<p>The <a href=\"https:\/\/gist.github.com\/WietseWind\/e4cffd3a3cdc7728945edcf2b5b7be7d\">WietseWind github<\/a> repo has a great script to install racadm via native packages, which is better than using &#8216;alien&#8217; which failed to work on Ubuntu 22.04. I was then able to setup the scrips provided so the native Dell fans could be used to cool the GPU&#8217;s. Whilst the fans are  noisy at the high speed, it does ensure that the GPU&#8217;s are not throttled.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Throttle No More: My Strategy for GPU Cooling in Dell PowerEdge\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/RUW3Ay5rsCY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">GPU Cooling via racadm <\/figcaption><\/figure>\n\n\n\n<p> I done some basic tests for the GPU&#8217;s and then set about installing  ollama and the llama3:8b-instruct-fp16 model, then the containerized version of OpenWebUI.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"391\" src=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-6-1024x391.png\" alt=\"\" class=\"wp-image-567\" srcset=\"https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-6-1024x391.png 1024w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-6-300x115.png 300w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-6-768x293.png 768w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-6-1536x587.png 1536w, https:\/\/www.alanknipmeyer.phd\/wp-content\/uploads\/2024\/08\/image-6-2048x782.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">OpenWebUI + ollama<\/figcaption><\/figure>\n\n\n\n<p>The GPU capacity and CPU speed was more than enough to run a  interactive session via OpenWebUI. So I had my fully functioning GPU server at a very affordable price !<\/p>\n\n\n\n<p>I&#8217;ve made a quite long video which covers the build process using the videos above.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Dell R720 , NVIDIA P100+P40 server build\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/2fmNdIxAUcs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>When I was completing my masters thesis, I used EC2 Machine p3 instances along side my &#8216;on prem&#8217; devices. As I was moving various code\/models all the time these instances where on, the bills where racking up &#8211; sure it was great to have such powerful GPU&#8217;s on demand and I could easily setup EKS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-560","post","type-post","status-publish","format-standard","hentry","category-lab"],"_links":{"self":[{"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/posts\/560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/comments?post=560"}],"version-history":[{"count":1,"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/posts\/560\/revisions"}],"predecessor-version":[{"id":568,"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/posts\/560\/revisions\/568"}],"wp:attachment":[{"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/media?parent=560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/categories?post=560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alanknipmeyer.phd\/index.php\/wp-json\/wp\/v2\/tags?post=560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}