deploy: e9dfd966ba
This commit is contained in:
2
404.html
2
404.html
@@ -4,4 +4,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -13,4 +13,4 @@ My work focuses on Infrastructure Performance and Customer Engineering, specific
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
186
hotfix.py
Normal file
186
hotfix.py
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
# 1. Prepare /tmp/patch
|
||||||
|
PATCH_DIR = "/tmp/patch"
|
||||||
|
LITELLM_DIR = os.path.join(PATCH_DIR, "litellm")
|
||||||
|
|
||||||
|
if os.path.exists(PATCH_DIR):
|
||||||
|
shutil.rmtree(PATCH_DIR)
|
||||||
|
os.makedirs(PATCH_DIR)
|
||||||
|
|
||||||
|
shutil.copytree("/app/litellm", LITELLM_DIR)
|
||||||
|
|
||||||
|
# 2. Patch openai.py
|
||||||
|
openai_file = os.path.join(LITELLM_DIR, "types/llms/openai.py")
|
||||||
|
with open(openai_file, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
tool_call_chunk_original = (
|
||||||
|
'class ChatCompletionToolCallChunk(TypedDict): # result of /chat/completions call\n'
|
||||||
|
' id: Optional[str]\n'
|
||||||
|
' type: Literal["function"]'
|
||||||
|
)
|
||||||
|
tool_call_chunk_patch = tool_call_chunk_original.replace(
|
||||||
|
'Literal["function"]', 'Literal["function", "web_search"]'
|
||||||
|
)
|
||||||
|
delta_chunk_original = (
|
||||||
|
"class ChatCompletionDeltaToolCallChunk(TypedDict, total=False):\n"
|
||||||
|
" id: str\n"
|
||||||
|
' type: Literal["function"]'
|
||||||
|
)
|
||||||
|
delta_chunk_patch = delta_chunk_original.replace(
|
||||||
|
'Literal["function"]', 'Literal["function", "web_search"]'
|
||||||
|
)
|
||||||
|
|
||||||
|
for original, patched, label in [
|
||||||
|
(tool_call_chunk_original, tool_call_chunk_patch, "ChatCompletionToolCallChunk"),
|
||||||
|
(delta_chunk_original, delta_chunk_patch, "ChatCompletionDeltaToolCallChunk"),
|
||||||
|
]:
|
||||||
|
if original in content:
|
||||||
|
content = content.replace(original, patched, 1)
|
||||||
|
else:
|
||||||
|
print(f"Hotfix warning: {label} pattern not found, skipping update")
|
||||||
|
|
||||||
|
with open(openai_file, "w") as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
# 3. Patch transformation.py
|
||||||
|
trans_file = os.path.join(LITELLM_DIR, "completion_extras/litellm_responses_transformation/transformation.py")
|
||||||
|
with open(trans_file, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
import_block_original = """ from litellm.types.utils import (
|
||||||
|
ChatCompletionToolCallChunk,
|
||||||
|
GenericStreamingChunk,
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
import_block_updated = """ from litellm.types.utils import (
|
||||||
|
ChatCompletionToolCallChunk,
|
||||||
|
Delta,
|
||||||
|
GenericStreamingChunk,
|
||||||
|
ModelResponseStream,
|
||||||
|
StreamingChoices,
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if import_block_original in content:
|
||||||
|
content = content.replace(import_block_original, import_block_updated, 1)
|
||||||
|
elif import_block_updated in content:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
print("Hotfix warning: unexpected chunk_parser import layout, skipping Delta/ModelResponseStream import patch")
|
||||||
|
|
||||||
|
added_block = """ elif output_item.get("type") == "web_search_call":
|
||||||
|
# handle web search call - mask tool call by emitting empty content delta
|
||||||
|
# This prevents Open WebUI from seeing tool_calls and trying to execute them
|
||||||
|
action_payload = output_item.get("action")
|
||||||
|
verbose_logger.debug(
|
||||||
|
"Chat provider: masking web_search_call (added) call_id=%s action=%s",
|
||||||
|
output_item.get("call_id"),
|
||||||
|
action_payload,
|
||||||
|
)
|
||||||
|
# Emit empty content delta instead of tool_call to mask the tool usage
|
||||||
|
return ModelResponseStream(
|
||||||
|
choices=[
|
||||||
|
StreamingChoices(
|
||||||
|
index=0,
|
||||||
|
delta=Delta(content=""),
|
||||||
|
finish_reason=None,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
done_block = """ elif output_item.get("type") == "web_search_call":
|
||||||
|
# handle web search done - mask tool call by emitting empty content delta
|
||||||
|
# This prevents Open WebUI from seeing tool_calls and trying to execute them
|
||||||
|
action_payload = output_item.get("action")
|
||||||
|
verbose_logger.debug(
|
||||||
|
"Chat provider: masking web_search_call (done) call_id=%s action=%s",
|
||||||
|
output_item.get("call_id"),
|
||||||
|
action_payload,
|
||||||
|
)
|
||||||
|
# Emit empty content delta instead of tool_call to mask the tool usage
|
||||||
|
# Do NOT set finish_reason="tool_calls" as that would signal Open WebUI to handle the tool
|
||||||
|
return ModelResponseStream(
|
||||||
|
choices=[
|
||||||
|
StreamingChoices(
|
||||||
|
index=0,
|
||||||
|
delta=Delta(content=""),
|
||||||
|
finish_reason=None,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
added_target = ' elif output_item.get("type") == "message":'
|
||||||
|
|
||||||
|
def insert_block(source: str, block: str, occurrence_index: int) -> str:
|
||||||
|
"""Insert block before the nth occurrence (0-based) of added_target."""
|
||||||
|
start = -1
|
||||||
|
search_from = 0
|
||||||
|
for _ in range(occurrence_index + 1):
|
||||||
|
start = source.find(added_target, search_from)
|
||||||
|
if start == -1:
|
||||||
|
return source
|
||||||
|
search_from = start + len(added_target)
|
||||||
|
return source[:start] + block + source[start:]
|
||||||
|
|
||||||
|
if 'masking web_search_call (added)' not in content:
|
||||||
|
new_content = insert_block(content, added_block, 0)
|
||||||
|
if new_content == content:
|
||||||
|
print("Hotfix warning: unable to find insertion point for web_search_call (added)")
|
||||||
|
else:
|
||||||
|
content = new_content
|
||||||
|
|
||||||
|
if 'masking web_search_call (done)' not in content:
|
||||||
|
new_content = insert_block(content, done_block, 1)
|
||||||
|
if new_content == content:
|
||||||
|
print("Hotfix warning: unable to find insertion point for web_search_call (done)")
|
||||||
|
else:
|
||||||
|
content = new_content
|
||||||
|
|
||||||
|
# 4. Ensure streaming tool call chunks fall back to output_item IDs
|
||||||
|
call_id_pattern = 'id=output_item.get("call_id"),'
|
||||||
|
call_id_patch = 'id=output_item.get("call_id") or output_item.get("id"),'
|
||||||
|
if call_id_pattern in content:
|
||||||
|
content = content.replace(call_id_pattern, call_id_patch)
|
||||||
|
|
||||||
|
# 5. Guard assistant tool_call conversions when id is missing
|
||||||
|
tool_call_block_original = """ if function:
|
||||||
|
input_tool_call = {
|
||||||
|
"type": "function_call",
|
||||||
|
"call_id": tool_call["id"],
|
||||||
|
}
|
||||||
|
if "name" in function:
|
||||||
|
input_tool_call["name"] = function["name"]
|
||||||
|
if "arguments" in function:
|
||||||
|
input_tool_call["arguments"] = function["arguments"]
|
||||||
|
input_items.append(input_tool_call)
|
||||||
|
"""
|
||||||
|
tool_call_block_patch = """ if function:
|
||||||
|
call_id = tool_call.get("id") or tool_call.get("call_id")
|
||||||
|
if not call_id:
|
||||||
|
call_id = f"auto_tool_call_{len(input_items)}"
|
||||||
|
input_tool_call = {
|
||||||
|
"type": "function_call",
|
||||||
|
"call_id": call_id,
|
||||||
|
}
|
||||||
|
if "name" in function:
|
||||||
|
input_tool_call["name"] = function["name"]
|
||||||
|
if "arguments" in function:
|
||||||
|
input_tool_call["arguments"] = function["arguments"]
|
||||||
|
input_items.append(input_tool_call)
|
||||||
|
"""
|
||||||
|
if tool_call_block_original in content:
|
||||||
|
content = content.replace(tool_call_block_original, tool_call_block_patch, 1)
|
||||||
|
elif "auto_tool_call_" not in content:
|
||||||
|
print("Hotfix warning: assistant tool_call block not found; missing id guard not applied")
|
||||||
|
|
||||||
|
with open(trans_file, "w") as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print("Successfully applied hotfixes to /tmp/patch/litellm")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<!doctype html><html lang=en><head><title>Eric X. Liu's Personal Page</title><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=color-scheme content="light dark"><meta http-equiv=Content-Security-Policy content="upgrade-insecure-requests; block-all-mixed-content; default-src 'self'; child-src 'self'; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net/; form-action 'self'; frame-src 'self' https://www.youtube.com https://disqus.com; img-src 'self' https://referrer.disqus.com https://c.disquscdn.com https://*.disqus.com; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/ https://cdn.jsdelivr.net/; script-src 'self' 'unsafe-inline' https://www.google-analytics.com https://cdn.jsdelivr.net/ https://pagead2.googlesyndication.com https://static.cloudflareinsights.com https://unpkg.com https://ericxliu-me.disqus.com https://disqus.com https://*.disqus.com https://*.disquscdn.com https://unpkg.com; connect-src 'self' https://www.google-analytics.com https://pagead2.googlesyndication.com https://cloudflareinsights.com ws://localhost:1313 ws://localhost:* wss://localhost:* https://links.services.disqus.com https://*.disqus.com;"><meta name=author content="Eric X. Liu"><meta name=description content="Eric X. Liu - Software & Performance Engineer at Google. Sharing insights about software engineering, performance optimization, tech industry experiences, mountain biking adventures, Jeep overlanding, and outdoor activities."><meta name=keywords content="software engineer,performance engineering,Google engineer,tech blog,software development,performance optimization,Eric Liu,engineering blog,mountain biking,Jeep enthusiast,overlanding,camping,outdoor adventures"><meta name=twitter:card content="summary"><meta name=twitter:title content="Eric X. Liu's Personal Page"><meta name=twitter:description content="Eric X. Liu - Software & Performance Engineer at Google. Sharing insights about software engineering, performance optimization, tech industry experiences, mountain biking adventures, Jeep overlanding, and outdoor activities."><meta property="og:url" content="https://ericxliu.me/"><meta property="og:site_name" content="Eric X. Liu's Personal Page"><meta property="og:title" content="Eric X. Liu's Personal Page"><meta property="og:description" content="Eric X. Liu - Software & Performance Engineer at Google. Sharing insights about software engineering, performance optimization, tech industry experiences, mountain biking adventures, Jeep overlanding, and outdoor activities."><meta property="og:locale" content="en"><meta property="og:type" content="website"><link rel=preload href=/fonts/fa-solid-900.woff2 as=font type=font/woff2 crossorigin><link rel=preload href=/fonts/fa-brands-400.woff2 as=font type=font/woff2 crossorigin><link rel=canonical href=https://ericxliu.me/><link rel=preload href=/fonts/fa-brands-400.woff2 as=font type=font/woff2 crossorigin><link rel=preload href=/fonts/fa-regular-400.woff2 as=font type=font/woff2 crossorigin><link rel=preload href=/fonts/fa-solid-900.woff2 as=font type=font/woff2 crossorigin><link rel=stylesheet href=/css/coder.min.4b392a85107b91dbdabc528edf014a6ab1a30cd44cafcd5325c8efe796794fca.css integrity="sha256-SzkqhRB7kdvavFKO3wFKarGjDNRMr81TJcjv55Z5T8o=" crossorigin=anonymous media=screen><link rel=stylesheet href=/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin=anonymous media=screen><link rel=icon type=image/svg+xml href=/images/favicon.svg sizes=any><link rel=icon type=image/png href=/images/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/images/favicon-16x16.png sizes=16x16><link rel=apple-touch-icon href=/images/apple-touch-icon.png><link rel=apple-touch-icon sizes=180x180 href=/images/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><link rel=mask-icon href=/images/safari-pinned-tab.svg color=#5bbad5><link rel=alternate type=application/rss+xml href=/index.xml title="Eric X. Liu's Personal Page"><meta name=generator content="Hugo 0.153.3"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3972604619956476" crossorigin=anonymous></script><script type=application/ld+json>{"@context":"http://schema.org","@type":"Person","name":"Eric X. Liu","url":"https:\/\/ericxliu.me\/","description":"Software \u0026 Performance Engineer at Google","sameAs":["https:\/\/www.linkedin.com\/in\/eric-x-liu-46648b93\/","https:\/\/git.ericxliu.me\/eric"]}</script></head><body class="preload-transitions colorscheme-auto"><div class=float-container><a id=dark-mode-toggle class=colorscheme-toggle><i class="fa-solid fa-adjust fa-fw" aria-hidden=true></i></a></div><main class=wrapper><nav class=navigation><section class=container><a class=navigation-title href=https://ericxliu.me/>Eric X. Liu's Personal Page
|
<!doctype html><html lang=en><head><title>Eric X. Liu's Personal Page</title><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=color-scheme content="light dark"><meta http-equiv=Content-Security-Policy content="upgrade-insecure-requests; block-all-mixed-content; default-src 'self'; child-src 'self'; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net/; form-action 'self'; frame-src 'self' https://www.youtube.com https://disqus.com; img-src 'self' https://referrer.disqus.com https://c.disquscdn.com https://*.disqus.com; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/ https://cdn.jsdelivr.net/; script-src 'self' 'unsafe-inline' https://www.google-analytics.com https://cdn.jsdelivr.net/ https://pagead2.googlesyndication.com https://static.cloudflareinsights.com https://unpkg.com https://ericxliu-me.disqus.com https://disqus.com https://*.disqus.com https://*.disquscdn.com https://unpkg.com; connect-src 'self' https://www.google-analytics.com https://pagead2.googlesyndication.com https://cloudflareinsights.com ws://localhost:1313 ws://localhost:* wss://localhost:* https://links.services.disqus.com https://*.disqus.com;"><meta name=author content="Eric X. Liu"><meta name=description content="Eric X. Liu - Software & Performance Engineer at Google. Sharing insights about software engineering, performance optimization, tech industry experiences, mountain biking adventures, Jeep overlanding, and outdoor activities."><meta name=keywords content="software engineer,performance engineering,Google engineer,tech blog,software development,performance optimization,Eric Liu,engineering blog,mountain biking,Jeep enthusiast,overlanding,camping,outdoor adventures"><meta name=twitter:card content="summary"><meta name=twitter:title content="Eric X. Liu's Personal Page"><meta name=twitter:description content="Eric X. Liu - Software & Performance Engineer at Google. Sharing insights about software engineering, performance optimization, tech industry experiences, mountain biking adventures, Jeep overlanding, and outdoor activities."><meta property="og:url" content="https://ericxliu.me/"><meta property="og:site_name" content="Eric X. Liu's Personal Page"><meta property="og:title" content="Eric X. Liu's Personal Page"><meta property="og:description" content="Eric X. Liu - Software & Performance Engineer at Google. Sharing insights about software engineering, performance optimization, tech industry experiences, mountain biking adventures, Jeep overlanding, and outdoor activities."><meta property="og:locale" content="en"><meta property="og:type" content="website"><link rel=preload href=/fonts/fa-solid-900.woff2 as=font type=font/woff2 crossorigin><link rel=preload href=/fonts/fa-brands-400.woff2 as=font type=font/woff2 crossorigin><link rel=canonical href=https://ericxliu.me/><link rel=preload href=/fonts/fa-brands-400.woff2 as=font type=font/woff2 crossorigin><link rel=preload href=/fonts/fa-regular-400.woff2 as=font type=font/woff2 crossorigin><link rel=preload href=/fonts/fa-solid-900.woff2 as=font type=font/woff2 crossorigin><link rel=stylesheet href=/css/coder.min.4b392a85107b91dbdabc528edf014a6ab1a30cd44cafcd5325c8efe796794fca.css integrity="sha256-SzkqhRB7kdvavFKO3wFKarGjDNRMr81TJcjv55Z5T8o=" crossorigin=anonymous media=screen><link rel=stylesheet href=/css/coder-dark.min.a00e6364bacbc8266ad1cc81230774a1397198f8cfb7bcba29b7d6fcb54ce57f.css integrity="sha256-oA5jZLrLyCZq0cyBIwd0oTlxmPjPt7y6KbfW/LVM5X8=" crossorigin=anonymous media=screen><link rel=icon type=image/svg+xml href=/images/favicon.svg sizes=any><link rel=icon type=image/png href=/images/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/images/favicon-16x16.png sizes=16x16><link rel=apple-touch-icon href=/images/apple-touch-icon.png><link rel=apple-touch-icon sizes=180x180 href=/images/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><link rel=mask-icon href=/images/safari-pinned-tab.svg color=#5bbad5><link rel=alternate type=application/rss+xml href=/index.xml title="Eric X. Liu's Personal Page"><meta name=generator content="Hugo 0.153.4"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3972604619956476" crossorigin=anonymous></script><script type=application/ld+json>{"@context":"http://schema.org","@type":"Person","name":"Eric X. Liu","url":"https:\/\/ericxliu.me\/","description":"Software \u0026 Performance Engineer at Google","sameAs":["https:\/\/www.linkedin.com\/in\/eric-x-liu-46648b93\/","https:\/\/git.ericxliu.me\/eric"]}</script></head><body class="preload-transitions colorscheme-auto"><div class=float-container><a id=dark-mode-toggle class=colorscheme-toggle><i class="fa-solid fa-adjust fa-fw" aria-hidden=true></i></a></div><main class=wrapper><nav class=navigation><section class=container><a class=navigation-title href=https://ericxliu.me/>Eric X. Liu's Personal Page
|
||||||
</a><input type=checkbox id=menu-toggle>
|
</a><input type=checkbox id=menu-toggle>
|
||||||
<label class="menu-button float-right" for=menu-toggle><i class="fa-solid fa-bars fa-fw" aria-hidden=true></i></label><ul class=navigation-list><li class=navigation-item><a class=navigation-link href=/posts/>Posts</a></li><li class=navigation-item><a class=navigation-link href=https://chat.ericxliu.me>Chat</a></li><li class=navigation-item><a class=navigation-link href=https://git.ericxliu.me/user/oauth2/Authenitk>Git</a></li><li class=navigation-item><a class=navigation-link href=https://coder.ericxliu.me/api/v2/users/oidc/callback>Coder</a></li><li class=navigation-item><a class=navigation-link href=/about/>About</a></li><li class=navigation-item><a class=navigation-link href=/>|</a></li><li class=navigation-item><a class=navigation-link href=https://sso.ericxliu.me>Sign in</a></li></ul></section></nav><div class=content><section class="container centered"><div class=about><div class=avatar><img src=/images/gravatar.png alt=avatar width=200 height=200></div><h1>Eric X. Liu</h1><h2 id=typeit-info></h2><script src=https://unpkg.com/typeit@8.7.1/dist/index.umd.js></script><script>document.addEventListener("DOMContentLoaded",function(){new TypeIt("#typeit-info",{strings:["Software & Performance Engineer @Google","DIY Overlander & Rock Crawler","Tech Enthusiast"],speed:50,loop:!0,breakLines:!1,nextStringDelay:2e3,deleteSpeed:50,startDelay:500,lifeLike:!0}).go()})</script><ul><li><a href=https://git.ericxliu.me/eric aria-label=Git><i class="fa-brands fa-git fa-2x" aria-hidden=true></i></a></li><li><a href=https://www.linkedin.com/in/eric-x-liu-46648b93/ aria-label=linkedin><i class="fa-brands fa-linkedin fa-2x" aria-hidden=true></i></a></li><li><style>#span-41849f0f.cloaked-e-mail{display:none}</style> <span class=cloaked-e-mail data-user=cire data-domain=em.uilxcire data-display="PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIGZhLTJ4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPg==" id=span-41849f0f></span>
|
<label class="menu-button float-right" for=menu-toggle><i class="fa-solid fa-bars fa-fw" aria-hidden=true></i></label><ul class=navigation-list><li class=navigation-item><a class=navigation-link href=/posts/>Posts</a></li><li class=navigation-item><a class=navigation-link href=https://chat.ericxliu.me>Chat</a></li><li class=navigation-item><a class=navigation-link href=https://git.ericxliu.me/user/oauth2/Authenitk>Git</a></li><li class=navigation-item><a class=navigation-link href=https://coder.ericxliu.me/api/v2/users/oidc/callback>Coder</a></li><li class=navigation-item><a class=navigation-link href=/about/>About</a></li><li class=navigation-item><a class=navigation-link href=/>|</a></li><li class=navigation-item><a class=navigation-link href=https://sso.ericxliu.me>Sign in</a></li></ul></section></nav><div class=content><section class="container centered"><div class=about><div class=avatar><img src=/images/gravatar.png alt=avatar width=200 height=200></div><h1>Eric X. Liu</h1><h2 id=typeit-info></h2><script src=https://unpkg.com/typeit@8.7.1/dist/index.umd.js></script><script>document.addEventListener("DOMContentLoaded",function(){new TypeIt("#typeit-info",{strings:["Software & Performance Engineer @Google","DIY Overlander & Rock Crawler","Tech Enthusiast"],speed:50,loop:!0,breakLines:!1,nextStringDelay:2e3,deleteSpeed:50,startDelay:500,lifeLike:!0}).go()})</script><ul><li><a href=https://git.ericxliu.me/eric aria-label=Git><i class="fa-brands fa-git fa-2x" aria-hidden=true></i></a></li><li><a href=https://www.linkedin.com/in/eric-x-liu-46648b93/ aria-label=linkedin><i class="fa-brands fa-linkedin fa-2x" aria-hidden=true></i></a></li><li><style>#span-f88cffe8.cloaked-e-mail{display:none}</style> <span class=cloaked-e-mail data-user=cire data-domain=em.uilxcire data-display="PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIGZhLTJ4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPg==" id=span-f88cffe8></span>
|
||||||
<script id=script-41849f0f>var span,scriptTag=document.getElementById("script-41849f0f"),link=document.createElement("a"),address="cire".split("").reverse().join("")+"@"+"em.uilxcire".split("").reverse().join("");link.href="mailto:"+address,span=document.getElementById("span-41849f0f"),link.innerHTML=atob(span.getAttribute("data-display")),scriptTag.parentElement.insertBefore(link,scriptTag.previousElementSibling),scriptTag.parentElement.removeChild(scriptTag.previousElementSibling)</script></li><li><a href=https://ericxliu.me/index.xml aria-label=RSS rel=alternate type=application/rss+xml><i class="fa-solid fa-rss fa-2x" aria-hidden=true></i></a></li></ul></div></section></div><footer class=footer><section class=container>©
|
<script id=script-f88cffe8>var span,scriptTag=document.getElementById("script-f88cffe8"),link=document.createElement("a"),address="cire".split("").reverse().join("")+"@"+"em.uilxcire".split("").reverse().join("");link.href="mailto:"+address,span=document.getElementById("span-f88cffe8"),link.innerHTML=atob(span.getAttribute("data-display")),scriptTag.parentElement.insertBefore(link,scriptTag.previousElementSibling),scriptTag.parentElement.removeChild(scriptTag.previousElementSibling)</script></li><li><a href=https://ericxliu.me/index.xml aria-label=RSS rel=alternate type=application/rss+xml><i class="fa-solid fa-rss fa-2x" aria-hidden=true></i></a></li></ul></div></section></div><footer class=footer><section class=container>©
|
||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -62,4 +62,4 @@ After running 66 inference tests across seven different language models ranging
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -25,4 +25,4 @@ Understanding the Two Primary Maintenance Cycles Link to heading The Breville Ba
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -20,4 +20,4 @@ Our overarching philosophy is simple: isolate and change only one variable at a
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -168,4 +168,4 @@ Flashing NVIDIA Jetson devices remotely presents unique challenges when the host
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -18,4 +18,4 @@ The answer lies in creating a universal language—a bridge between the continuo
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -14,4 +14,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -71,4 +71,4 @@ Do not rely on header forwarding magic. Force the scheme in the plugin configura
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -44,4 +44,4 @@ The <strong>Top-K routing</strong> mechanism, as illustrated in the provided ima
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -98,4 +98,4 @@ When using WireGuard together with MWAN3 on OpenWrt, the tunnel can fail to esta
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -13,4 +13,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -25,4 +25,4 @@ where <code>δ_t = r_t + γV(s_{t+1}) - V(s_t)</code></p><ul><li><strong>γ (gam
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -7,4 +7,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -59,4 +59,4 @@ nvidia-smi failed to communicate with the NVIDIA driver modprobe nvidia → “K
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -90,4 +90,4 @@ Supabase enters this space with a radically different philosophy: transparency.
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -30,4 +30,4 @@ But to truly understand the field, we must look at the pivotal models that explo
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -73,4 +73,4 @@ It turned out to be a syntax error in my arguments passed to the <code>Trainer</
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -26,4 +26,4 @@ This article explores the mathematical equivalence between Hinton’s concept of
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -36,4 +36,4 @@ In deep learning, a “channel” can be thought of as a feature dimensi
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -28,4 +28,4 @@ This article documents that journey. It details the pitfalls encountered, the co
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -9,4 +9,4 @@ One-minute read</span></div></div></header><div class=post-content><ul><li><a hr
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -31,4 +31,4 @@ The GPU TLB hierarchy is sensitive to page sizes.</p><ul><li><strong>4KB Pages:<
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
2016 -
|
2016 -
|
||||||
2025
|
2025
|
||||||
Eric X. Liu
|
Eric X. Liu
|
||||||
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/fbdae5f">[fbdae5f]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
<a href="https://git.ericxliu.me/eric/ericxliu-me/commit/e9dfd96">[e9dfd96]</a></section></footer></main><script src=/js/coder.min.6ae284be93d2d19dad1f02b0039508d9aab3180a12a06dcc71b0b0ef7825a317.js integrity="sha256-auKEvpPS0Z2tHwKwA5UI2aqzGAoSoG3McbCw73gloxc="></script><script defer src=https://static.cloudflareinsights.com/beacon.min.js data-cf-beacon='{"token": "987638e636ce4dbb932d038af74c17d1"}'></script></body></html>
|
||||||
Reference in New Issue
Block a user